home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 1998 March / Software of the Month Club 1998 March.iso / pc / dos / child / malbuch / malbuch.mac < prev    next >
Encoding:
Text File  |  1995-10-19  |  71.0 KB  |  3,052 lines

  1.  
  2. ; 22. 4.94
  3. ;  7.11.94 Uebersicht mit Rand
  4. ;  3. 1.95 option -c (kein Farbaenderung durch rechte Maustaste)
  5. ;          option -m (zusaetzlich keine Mischfarben)
  6. ; 11. 1.95 PostScript Plot
  7. ; 15. 5.95 enable plane 0-3 nach new_color 
  8. ; 20. 8.95 edit mode
  9. ; 28. 9.95 SHIFT DEL
  10. ; 17.10.95 
  11.  
  12.         ; klee@informatik.unibw-muenchen.de
  13.  
  14.         nolist
  15.         check=$542d4dcd
  16.         ycount=32       ; 1,2,4,6,16 oder 32
  17.         color_file='loc.'
  18.  
  19.         @=$100
  20.  
  21. start:  br.w    main
  22.  
  23. ende:   move.w  #meld5,r0
  24.         bsr.w   print_string
  25.         move.w  #$4c00,r0
  26.         trap    #$21
  27.  
  28.  
  29. read_ch:
  30.         ; Eingabe: keine
  31.         ; Ausgabe: r0.b : ascii  m0.b : erweiterter Code
  32.         move.w  #0,r0
  33.         move.w  r3,-(sp)
  34.         trap    #$16
  35.         move.w  (sp)+,r3
  36.         rts.w
  37.  
  38. read_if_ch:
  39.         ; Eingabe: keine
  40.         ; Ausgabe: z-flag = 0 fall Zeichen vorhanden, dann:
  41.         ;          r0.b : ascii  m0.b : erweiterter Code
  42.         move.w  #$100,r0
  43.         trap    #$16
  44.         rts.w
  45.  
  46. print_ch:
  47.         ; Eingabe: r0.b auszugebendes Zeichen
  48.         ; Ausgabe: keine
  49.         movem.l r0-r7,-(sp)
  50.         move.w  s1,-(sp)
  51.         move.b  #$0e,m0
  52.         move.b  #0,r3
  53.         trap    #$10
  54.         move.w  (sp)+,s1
  55.         movem.l (sp)+,r0-r7
  56.         rts.w
  57.  
  58. print_string:
  59.         ; Eingabe: r0.w{s0} : pointer auf string durch 0 abgeschlossen
  60.         ; Ausgabe: keine
  61.         movem.l r0-r7,-(sp)
  62.         move.w  r0,r3
  63.  
  64. _20:    move.b  (r3.w),r0
  65.         tst.b   r0,r0
  66.         beq.b   _10
  67.         inc.w   r3
  68.         bsr.w   print_ch
  69.         br.b    _20
  70. _10:    movem.l (sp)+,r0-r7
  71.         rts.w
  72.  
  73.  
  74. print_hex_l:
  75.         ; Eingabe r0.l auszugebendes Langwort
  76.         ; Ausgabe keine
  77.         movem.l r0-r7,-(sp)
  78.         move.l  r0,r1
  79.  
  80.         move.w  #8,r2
  81. _20:    rol.l   #4,r1
  82.         move.b  r1,r0
  83.         andq.l  #$0f,r0
  84.         add.b   #'0',r0
  85.         cmp.b   #'9',r0
  86.         bls.b    _10
  87.         add.b   #'a'-'9'-1,r0
  88. _10:    bsr.w   print_ch
  89.         dbf.w   r2,_20
  90.         movem.l (sp)+,r0-r7
  91.         rts.w
  92.  
  93. maus_init:
  94.         movem.w r0-r7,-(sp)
  95.         move.w  #$0007,r0
  96.         move.w  #639,r1
  97.         eor.w   r2,r2
  98.         trap    #$33
  99.         move.w  #$0008,r0
  100.         move.w  #479,r1
  101.         eor.w   r2,r2
  102.         trap    #$33
  103.         movem.w (sp)+,r0-r7
  104.         rts.w
  105.  
  106. maus_on:
  107.         move.w  r0,-(sp)
  108.         move.w  #1,r0
  109.         trap    #$33
  110.         move.w  (sp)+,r0
  111.         rts.w
  112.  
  113.  
  114. maus_off:
  115.         move.w  r0,-(sp)
  116.         move.w  #2,r0
  117.         trap    #$33
  118.         move.w  (sp)+,r0
  119.         br.w    set_gmode       ; jsr + rts
  120. ;        rts.w
  121.  
  122. maus_off0:
  123.         move.w  r0,-(sp)
  124.         move.w  #2,r0
  125.         trap    #$33
  126.         move.w  (sp)+,r0
  127.         br.w    set_gmode0       ; jsr + rts
  128. ;        rts.w
  129.  
  130. maus_read:
  131.         move.w  r1,-(sp)
  132.         move.w  r2,-(sp)
  133.         move.w  r3,-(sp)
  134.         move.w  #3,r0
  135.         trap    #$33
  136.         move.w  r1,ypos
  137.         move.w  r2,xpos
  138.         move.w  r3,r0
  139.         move.w  (sp)+,r3
  140.         move.w  (sp)+,r2
  141.         move.w  (sp)+,r1
  142.         rts.w
  143.  
  144. init_graph:
  145.         move.w  r0,-(sp)
  146.         move.w  r1,-(sp)
  147.  
  148.         move.w  #$12,r0    ; 640x480 16 Farben
  149.         trap    #$10
  150.  
  151.         move.w  (sp)+,r1
  152.         move.w  (sp)+,r0
  153.         
  154.         br.w   set_gmode  ; jsr + rts
  155. ;        rts.w
  156.  
  157.  
  158. set_gmode0:
  159.         move.w  r0,-(sp)
  160.         move.w  r1,-(sp)
  161.  
  162.         move.w  #$3ce,r1
  163.         move.w  #$0001,r0
  164.         out.w   r0,r1       ; Disable Set/Reset = 0
  165.  
  166.         move.w  #$0005,r0   ; Write Mode 0
  167.         out.w   r0,r1
  168.  
  169.         move.w  #$ee08,r0   ; Mask Register
  170.         out.w   r0,r1
  171.  
  172.         move.w  (sp)+,r1
  173.         move.w  (sp)+,r0
  174.         rts.w
  175.  
  176. set_gmode1:
  177.         move.w  r0,-(sp)
  178.         move.w  r1,-(sp)
  179.  
  180.         move.w  #$3ce,r1
  181.         move.w  #$0001,r0
  182.         out.w   r0,r1       ; disable Set/Reset = 0
  183.  
  184.         move.w  #$0005,r0   ; Write Mode 0
  185.         out.w   r0,r1
  186.  
  187.         move.w  #$ff08,r0   ; Mask Register
  188.         out.w   r0,r1
  189.  
  190.         move.w  (sp)+,r1
  191.         move.w  (sp)+,r0
  192.         rts.w
  193.  
  194.  
  195. set_gmode:
  196.         move.w  r0,-(sp)
  197.         move.w  r1,-(sp)
  198.  
  199.         move.w  #$3ce,r1
  200.         move.w  #$0f01,r0
  201.         out.w   r0,r1       ; Enable Set/Reset = f
  202.  
  203.         move.w  #$0305,r0   ; Write Mode 3
  204.         out.w   r0,r1
  205.  
  206.         move.w  #$ff08,r0   ; Mask Register
  207.         out.w   r0,r1
  208.  
  209.         move.w  (sp)+,r1
  210.         move.w  (sp)+,r0
  211.         rts.w
  212.  
  213. set_grau_palette:
  214.         movem.w r0-r7,-(sp)
  215.         move.w  #palette_grau,r5
  216.         br.b    set_palette1
  217. set_palette:
  218.         movem.w r0-r7,-(sp)
  219.         move.w  #palette,r5
  220. set_palette1:
  221.         move.w  #$3c8,r1
  222.  
  223.         eor.b   r0,r0
  224.         out.b   r0,r1
  225.         move.w  #6*3,r2
  226.         bsr.w   _200
  227.  
  228.         move.b  #$14,r0
  229.         out.b   r0,r1
  230.         move.w  #1*3,r2
  231.         bsr.w   _200
  232.  
  233.         move.b  #$07,r0
  234.         out.b   r0,r1
  235.         move.w  #1*3,r2
  236.         bsr.w   _200
  237.  
  238.         move.b  #$38,r0
  239.         out.b   r0,r1
  240.         move.w  #8*3,r2
  241.         bsr.w   _200
  242.         movem.w (sp)+,r0-r7
  243.         rts.w
  244.  
  245. _200:   inc.w   r1
  246. _210:   move.b  (r5.w),r0
  247.         inc.w   r5
  248.         out.b   r0,r1
  249.         dbf.w   r2,_210
  250.         dec.w   r1
  251.         rts.w
  252.  
  253. set_color:
  254.         ; setzt color als die aktuelle Farbe
  255.         ; veraendert keine Register
  256.         move.w  r0,-(sp)
  257.         move.w  r1,-(sp)
  258.         move.w  #$3ce,r1
  259.         move.b  color,m0
  260.         and.b   #$0f,m0
  261.         eor.b   r0,r0
  262.         out.w   r0,r1
  263.         move.w  (sp)+,r1
  264.         move.w  (sp)+,r0
  265.         rts.w
  266.  
  267.  
  268. fill_screen:
  269.         ; loescht Bildschirm mit Farbe color
  270.         ; veraendert keine Register
  271.         move.l  r0,-(sp)
  272.         move.w  r1,-(sp)
  273.         move.w  r2,-(sp)
  274.         move.w  r6,-(sp)
  275.  
  276.         bsr.w   set_color
  277.         
  278. ;        bsr.w   set_gmode
  279.         
  280.         move.w  #640*480/32,r2
  281.         eor.l   r0,r0
  282.         dec.l   r0
  283.         eor.w   r6,r6
  284. _10:    move.l  r0,(r6.w){s1}
  285.         addq.w  #4,r6
  286.         dbf.w   r2,_10
  287.  
  288.         move.w  (sp)+,r6
  289.         move.w  (sp)+,r2
  290.         move.w  (sp)+,r1
  291.         move.l  (sp)+,r0
  292.         rts.w
  293.  
  294. black_gitter:
  295.         ; veraendert keine Register
  296.         move.l  r0,-(sp)
  297.         move.w  r1,-(sp)
  298.         move.w  r2,-(sp)
  299.         move.w  r6,-(sp)
  300.  
  301.         move.w  #0,color
  302.         bsr.w   set_color
  303.  
  304. ;        bsr.w   set_gmode
  305.         
  306.         move.w  #10*480,r2
  307.         move.b  #1,r0
  308.         move.w  #7,r6
  309. _10:    move.b  (r6.w){s1},r1
  310.         move.b  r0,(r6.w){s1}
  311.         add.w   #8,r6
  312.         dbf.w   r2,_10
  313.  
  314.         eor.l   r0,r0
  315.         dec.l   r0
  316.         move.w  #80*47,r6
  317.         move.w  #10,r1
  318. _21:    move.w  #20,r2
  319. _20:    move.l  r0,(r6.w){s1}
  320.         addq.w  #4,r6
  321.         dbf.w   r2,_20
  322.         add.w   #80*47,r6
  323.         dec.w   r1
  324.         bne.b   _21
  325.  
  326.         move.w  (sp)+,r6
  327.         move.w  (sp)+,r2
  328.         move.w  (sp)+,r1
  329.         move.l  (sp)+,r0
  330.         rts.w
  331.  
  332.  
  333. hintergrund_halb:
  334.         movem.l r0-r7,-(sp)
  335.         move.w  #40/4,r1
  336.         move.w  #40,r4
  337.         br.b    hintergrund0
  338.  
  339. hintergrund:
  340.         movem.l r0-r7,-(sp)
  341.         move.w  #80/4,r1
  342.         eor.w   r4,r4
  343. hintergrund0:
  344.         
  345. ;        bsr.w   set_gmode
  346.  
  347.         move.w  #15,color
  348.         bsr.w   set_color
  349.  
  350.         eor.w   r5,r5
  351.         move.w  #480,r3
  352. _10:    move.w  r1,r2
  353. _20:    move.b  (r5.w){s1},r0
  354.         move.b  3.b(r5.w){s2},r0
  355.         move.b  r0,(r5.w){s1}
  356.         inc.w   r5
  357.         move.b  (r5.w){s1},r0
  358.         move.b  1.b(r5.w){s2},r0
  359.         move.b  r0,(r5.w){s1}
  360.         inc.w   r5
  361.         move.b  (r5.w){s1},r0
  362.         move.b  -1.b(r5.w){s2},r0
  363.         move.b  r0,(r5.w){s1}
  364.         inc.w   r5
  365.         move.b  (r5.w){s1},r0
  366.         move.b  -3.b(r5.w){s2},r0
  367.         move.b  r0,(r5.w){s1}
  368.         inc.w   r5
  369.         dbf.w   r2,_20
  370.         add.w   r4,r5
  371.         dec.w   r3
  372.         bne.b   _10
  373.  
  374.         movem.l (sp)+,r0-r7
  375.         rts.w
  376.  
  377.  
  378. fill:   movem.l r0-r7,-(sp)
  379.  
  380.         move.l  #-1,_oben       ; falls kein fill, aus fillbuf loeschen
  381.  
  382.         eor.l   r6,r6
  383.         eor.l   r0,r0
  384.         move.w  #80*480/4,r2
  385. _10:    move.l  r0,(r6.w){s3}
  386.         addq.w  #4,r6
  387.         dbf.w   r2,_10
  388.  
  389.         move.w  #xpos,r5
  390.         move.w  #ypos,r6
  391.         move.w  #1,r0
  392.         eor.w   r1,r1
  393.         move.w  #1,r3
  394.  
  395.         br.b    _130
  396.  
  397. _132:   add.w   r0,(r5.w)
  398.         inc.w   r1
  399.         cmp.w   r1,r3
  400.         bne.b   _130
  401.         eor.w   r1,r1
  402.         exg.w   r5,r6
  403.         cmp.w   #xpos,r5
  404.         bne.b   _130
  405.         neg.w   r0
  406.         inc.w   r3
  407.         cmp.w   #20,r3
  408.         bhi.w   _100
  409.  
  410. _130:   cmp.w   #639,xpos
  411.         bhi.b   _132
  412.         cmp.w   #479,ypos
  413.         bhi.b   _132
  414.  
  415.         muls.l  #640,ypos,r2
  416.         add.l   xpos,r2
  417.         eor.b   #$1f,r2
  418.         btst.l  r2,0.w{s2}
  419.         bcc.b   _132
  420.         bset.l  r2,0.w{s3}
  421.  
  422.         cmp.b   #$7f,3{s2}
  423.         bne.b   _131
  424.         cmp.w   #320,xpos
  425.         blo.w   _100
  426.  
  427. _131:   move.l  ypos,r4
  428.         move.w  r4,_oben
  429.         move.w  r4,_unten
  430.         move.w  r4,r3
  431.         bsr.w   _fill_line
  432.         br.b    _28
  433.  
  434. _25:    move.w  _unten,r3
  435.         move.w  _oben,r4
  436.         move.w  #0,_unten
  437.         move.w  #1000,_oben
  438. _28:    cmp.w   #479,r3
  439.         bhs.b   _20
  440.         inc.w   r3
  441. _20:    inc.w   r4
  442.         cmp.w   r3,r4
  443.         bhi.b   _29
  444. _27:    muls.l  #80,r4,r5
  445. _24:    move.w  #20,r2
  446.  
  447. _23:    move.l  -80.b(r5.w){s3},r0
  448.         or.l    (r5.w){s3},r0
  449.         and.l   (r5.w){s2},r0
  450.         cmp.l   r0,(r5.w){s3}
  451.         bne.b   _22
  452.         addq.w  #4,r5
  453.         dbf.w   r2,_23
  454.         br.b    _20
  455.  
  456. _21:    move.l  -80.b(r5.w){s3},r0
  457.         or.l    (r5.w){s3},r0
  458.         and.l   (r5.w){s2},r0
  459. _22:    move.l  r0,(r5.w){s3}
  460.         addq.w  #4,r5
  461.         dbf.w   r2,_21
  462.         bsr.w   _fill_line
  463.         bcc.b   _26
  464.         move.w  r4,_unten
  465.         cmp.w   _oben,r4
  466.         bhs.b   _26
  467.         move.w  r4,_oben
  468. _26:    inc.w   r4
  469.         cmp.w   #479,r4
  470.         bls.b   _27
  471. _29:    cmp.w   #1000,_oben
  472.         beq.b   _50
  473.  
  474.         move.w  _oben,r3
  475.         move.w  _unten,r4
  476.         move.w  #0,_unten
  477.         move.w  #1000,_oben
  478.  
  479.         dec.w   r3
  480.         bpl.b  _30
  481.         inc.w   r3
  482.  
  483. _30:    dec.w   r4
  484.         bmi.b   _39
  485.         cmp.w   r3,r4
  486.         blo.b   _39
  487. _37:    muls.l  #80,r4,r5
  488. _34:    move.w  #20,r2
  489.  
  490. _33:    move.l  80.b(r5.w){s3},r0
  491.         or.l    (r5.w){s3},r0
  492.         and.l   (r5.w){s2},r0
  493.         cmp.l   r0,(r5.w){s3}
  494.         bne.b   _32
  495.         addq.w  #4,r5
  496.         dbf.w   r2,_33
  497.         br.b    _30
  498.  
  499. _31:    move.l  80.b(r5.w){s3},r0
  500.         or.l    (r5.w){s3},r0
  501.         and.l   (r5.w){s2},r0
  502. _32:    move.l  r0,(r5.w){s3}
  503.         addq.w  #4,r5
  504.         dbf.w   r2,_31
  505.         bsr.w   _fill_line
  506.         bcc.b   _36
  507.         move.w  r4,_oben
  508.         cmp.w   _unten,r4
  509.         bls.b   _36
  510.         move.w  r4,_unten
  511. _36:    dec.w   r4
  512.         bpl.b   _37
  513. _39:    cmp.w   #1000,_oben
  514.         bne.w   _25
  515.  
  516. _50:
  517.         cmp.b   #$7f,3{s2}
  518.         bne.b   _51
  519.         eor.l   r6,r6
  520.         eor.l   r0,r0
  521.  
  522.         move.w  #480,r1
  523. _53:    move.w  #80/2/4,r2
  524. _52:    move.l  r0,(r6.w){s3}
  525.         addq.w  #4,r6
  526.         dbf.w   r2,_52
  527.         add.w   #40,r6
  528.         dec.w   r1
  529.         bne.b   _53
  530.  
  531. _51:
  532.  
  533. ;        bsr.w   set_gmode
  534.         move.w  color1,r0
  535.         move.w  r0,color
  536.         bsr.w   set_color
  537.  
  538.  
  539.         move.w  #-1,r1
  540.         eor.w   r5,r5
  541.         move.w  #80*480/4,r2
  542. _99:    move.l  (r5.w){s3},r0
  543.         or.l    r0,r0
  544.         bne.b   _96
  545.         addq.w  #4,r5
  546.         dbf.w   r2,_99
  547.         br.b    _97
  548.  
  549. _96:    or.w    r1,r1
  550.         bpl.b   _98
  551.  
  552.         move.l  r0,r4
  553.         inc.w   r1
  554.         move.w  #80*480/4,r0
  555.         sub.w   r2,r0
  556.         lsl.w   #2,r0
  557.         move.w  #80,r3
  558.         divu.w  r3,r1|r0
  559.         lsl.l   #16,r0
  560.         move.w  r1,r0
  561.         lsl.w   #3,r0
  562.         bscr.l  r4,r1
  563.         eor.b   #$1f,r1
  564.         add.w   r1,r0
  565.         move.l  r0,r1
  566.  
  567. _98:    move.b  (r5.w){s1},r0
  568.         move.b  3.b(r5.w){s3},r0
  569.         move.b  r0,(r5.w){s1}
  570.         inc.w   r5
  571.         move.b  (r5.w){s1},r0
  572.         move.b  1.b(r5.w){s3},r0
  573.         move.b  r0,(r5.w){s1}
  574.         inc.w   r5
  575.         move.b  (r5.w){s1},r0
  576.         move.b  -1.b(r5.w){s3},r0
  577.         move.b  r0,(r5.w){s1}
  578.         inc.w   r5
  579.         move.b  (r5.w){s1},r0
  580.         move.b  -3.b(r5.w){s3},r0
  581.         move.b  r0,(r5.w){s1}
  582.         inc.w   r5
  583.         dbf.w   r2,_99
  584. _97:
  585.  
  586.         move.w  color2,r0
  587.         cmp.w   color1,r0
  588.         beq.b   _91
  589.         move.w  r0,color
  590.         bsr.w   set_color
  591.  
  592. ; falls mischfarben
  593.         eor.w   r5,r5
  594.         move.b  #$55,r3
  595.         move.w  #480,r4
  596.  
  597. _93:    move.w  #80/4,r2
  598.         ror.b   #1,r3
  599. _92:    move.l  (r5.w){s3},r0
  600.         or.l    r0,r0
  601.         bne.b   _94
  602.         addq.w  #4,r5
  603.         dbf.w   r2,_92
  604.         dec.w   r4
  605.         bne.b   _93
  606.         br.b    _91
  607.  
  608. _94:    move.b  (r5.w){s1},r0
  609.         move.b  3.b(r5.w){s3},r0
  610.         and.b    r3,r0
  611.         move.b  r0,(r5.w){s1}
  612.         inc.w   r5
  613.         move.b  (r5.w){s1},r0
  614.         move.b  1.b(r5.w){s3},r0
  615.         and.b   r3,r0
  616.         move.b  r0,(r5.w){s1}
  617.         inc.w   r5
  618.         move.b  (r5.w){s1},r0
  619.         move.b  -1.b(r5.w){s3},r0
  620.         and.b   r3,r0
  621.         move.b  r0,(r5.w){s1}
  622.         inc.w   r5
  623.         move.b  (r5.w){s1},r0
  624.         move.b  -3.b(r5.w){s3},r0
  625.         and.b   r3,r0
  626.         move.b  r0,(r5.w){s1}
  627.         inc.w   r5
  628.         dbf.w   r2,_92
  629.         dec.w   r4
  630.         bne.b   _93
  631.  
  632. _91:    move.l  r1,r0
  633.         move.l  r0,_oben
  634.         move.w  #fillbuff,r5
  635.         move.w  fillcount,r2
  636.         or.w    r2,r2
  637.         beq.b   _83
  638. _82:    cmp.l   (r5.w),r0
  639.         beq.b   _81
  640.         addq.w  #6,r5
  641.         dbf.w   r2,_82
  642. _83:    inc.w   fillcount
  643.         cmp.w   #maxfill,fillcount
  644.         blo.b   _85
  645.         dec.w   fillcount
  646.         br.b    _100
  647. _85:    move.l  r0,(r5.w)
  648. _81:    move.b  color1,r0
  649.         move.b  color2,m0
  650.         move.w  r0,4.b(r5.w)
  651.  
  652.         cmp.w   #$0f0f,r0
  653.         bne.b   _100
  654.         cmp.b   #$7f,3{s2}
  655.         beq.b   _100
  656.         cmp.b   #$bf,3{s2}
  657.         beq.b   _100
  658.  
  659.         addq.w  #6,r5
  660. _70:    cmp.w   #fillbuff_end,r5
  661.         bhs.b   _71
  662.         move.w  (r5.w),r0
  663.         move.w  r0,-6.b(r5.w)
  664.         addq.w  #2,r5
  665.         br.b    _70
  666. _71:    dec.w   fillcount
  667.  
  668. _100:   movem.l (sp)+,r0-r7
  669.         move.l  _oben,r0
  670.         rts.w
  671.  
  672. even4
  673. _oben:  dc.w    0
  674. _unten: dc.w    0
  675.  
  676. _fill_line:
  677.         eor.w   r6,r6
  678.         muls.l  #80,r4,r5
  679.         eor.b   r0,r0
  680.         move.w  #20,r2
  681. _fl20:  lsr.b   #1,r0           ; Bit 0 in Carry
  682.         move.l  (r5.w){s3},r0
  683.         move.l  r0,r1
  684.         rocr.l  #1,r0
  685.         br.b    _fl23
  686. _fl21:  lsr.l   #1,r0
  687. _fl23:  or.l    r1,r0
  688.         and.l   (r5.w){s2},r0
  689.         cmp.l   r1,r0
  690.         beq.b   _fl22
  691.         move.w  #-1,r6
  692.         move.l  r0,r1
  693.         br.b    _fl21
  694. _fl22:  move.l  r0,(r5.w){s3}
  695.         addq.w  #4,r5
  696.         dbf.w   r2,_fl20
  697.  
  698.         eor.l   r0,r0
  699.         move.w  #20,r2
  700. _fl30:  subq.w  #4,r5
  701.         lsl.l   #1,r0           ; Bit 31 in Carry
  702.         move.l  (r5.w){s3},r0
  703.         move.l  r0,r1
  704.         rocl.l  #1,r0
  705.         br.b    _fl33
  706. _fl31:  lsl.l   #1,r0
  707. _fl33:  or.l    r1,r0
  708.         and.l   (r5.w){s2},r0
  709.         cmp.l   r1,r0
  710.         beq.b   _fl32
  711.         move.w  #-1,r6
  712.         move.l  r0,r1
  713.         br.b    _fl31
  714. _fl32:  move.l  r0,(r5.w){s3}
  715.         dbf.w   r2,_fl30
  716.  
  717.         lsr.w   #1,r6   ; Carry setzen
  718.         rts.w
  719.  
  720.  
  721. new_color:
  722.         movem.l r0-r7,-(sp)
  723.  
  724.         and.w   #$fff8,xpos
  725.         cmp.w   #640-64,xpos
  726.         bls.b   _10
  727.         move.w  #640-64,xpos
  728. _10:    cmp.w   #480-64,ypos
  729.         bls.b   _11
  730.         move.w  #480-64,ypos
  731. _11:    sub.w   #64,xpos
  732.         bpl.b   _12
  733.         move.w  #0,xpos
  734. _12:    sub.w   #64,ypos
  735.         bpl.b   _13
  736.         move.w  #0,ypos
  737. _13:
  738.         move.w  xpos,r0
  739.         move.w  r0,xpos1
  740.         move.w  ypos,r0
  741.         move.w  r0,ypos1
  742.  
  743.         muls.w  #80,ypos,r4
  744.         move.w  xpos,r1
  745.         lsr.w   #3,r1
  746.         add.w   r1,r4
  747.         move.w  r4,-(sp)
  748.  
  749.         move.w  #bild_save,r6
  750.         move.w  #$3ce,r1
  751.         move.w  #$0004,r0
  752.         out.w   r0,r1   ; Plane 0 lesen
  753.         bsr.w   _500
  754.         move.w  #$0104,r0
  755.         out.w   r0,r1   ; Plane 1 lesen
  756.         bsr.w   _500
  757.         move.w  #$0204,r0
  758.         out.w   r0,r1   ; Plane 2 lesen
  759.         bsr.w   _500
  760.         move.w  #$0304,r0
  761.         out.w   r0,r1   ; Plane 3 lesen
  762.         bsr.w   _500
  763.  
  764. _14:    move.w  #0,color
  765. ;        bsr.w   set_gmode
  766.         eor.l   r0,r0
  767.         dec.l   r0
  768.  
  769.         move.w  #4,r1
  770. _36:    move.w  #4,r3
  771. _35:    move.w  r4,r5
  772.         addq.w  #4,r4
  773.         move.w  #32,r2
  774.         bsr.w   set_color
  775.         inc.w   color
  776. _34:    move.l  r0,(r5.w){s1}
  777.         add.w   #80,r5
  778.         dbf.w   r2,_34
  779.         dec.w   r3
  780.         bne.b   _35
  781.         add.w   #32*80-16,r4
  782.         dec.w   r1
  783.         bne.b   _36
  784.  
  785. _51:    bsr.w   maus_read
  786.         or.b    r0,r0
  787.         bne.b   _51
  788.  
  789.         bsr.w   maus_on
  790. _50:    bsr.w   maus_read
  791.         tst.b   #3,r0
  792.         beq.b   _50
  793.         move.b  r0,r3
  794.         bsr.w   maus_off
  795.  
  796.         move.w  xpos,r0
  797.         sub.w   xpos1,r0
  798.         bmi.w   _60
  799.         cmp.w   #4*32,r0
  800.         bhs.w   _60
  801.         lsr.w   #5,r0
  802.  
  803.         move.w  ypos,r1
  804.         sub.w   ypos1,r1
  805.         bmi.w   _60
  806.         cmp.w   #4*32,r1
  807.         bhs.w   _60
  808.         lsr.w   #5,r1
  809.  
  810.         lsl.w   #2,r1
  811.         add.w   r1,r0
  812.         move.w  r0,color1
  813.         move.w  r0,color2
  814.         move.b  #0,auto_color
  815. .no_change_color:
  816.         cmp.b   #2,r3
  817.         bne.w   _61
  818. .no_mix_color:
  819.         cmp.w   #0,color1
  820.         bls.b   _70
  821.         cmp.w   #15,color1
  822.         beq.b   _70
  823.         move.w  (sp)+,r4
  824.         move.w  r4,-(sp)
  825.         bsr.w   change_color
  826.         bcc.w   _61
  827.         br.w    _14
  828.  
  829. _70:;    bsr.w   set_gmode
  830.         move.w  #0,color
  831.         move.w  (sp)+,r4
  832.         move.w  r4,-(sp)
  833.         move.b  #$55,r1
  834.  
  835.  
  836. _74:    bsr.w   set_color
  837.         move.w  color,r5
  838.         add.w   r4,r5
  839.         move.w  #8*9,r2
  840. _71:    move.b  (r5.w){s1},r0
  841.         move.b  r1,(r5.w){s1}
  842.         addq.w  #80,r5
  843.         ror.b   #1,r1
  844.         dbf.w   r2,_71
  845.  
  846. _79:    move.w  color,r5
  847.         add.w   r4,r5
  848.         eor.w   r3,r3
  849. _77:    move.w  #8,r2
  850. _73:    move.b  (r5.w){s1},r0
  851.         ror.b   #1,r1
  852.         move.b  r1,(r5.w){s1}
  853.         add.w   #80,r5
  854.         dbf.w   r2,_73
  855.         cmp.w   color,r3
  856.         bne.b   _78
  857.         addq.w  #16,r5
  858. _78:    dec.w   r5
  859.         inc.w   r3
  860.         cmp.w   #9,r3
  861.         bne.b   _77
  862.  
  863.         inc.w   color
  864.         cmp.w   #15,color
  865.         bls.b   _74
  866.  
  867. _75:    bsr.w   maus_read
  868.         or.b    r0,r0
  869.         bne.b   _75
  870.         move.w  #0,_color1
  871.         move.w  #0,_color2
  872.  
  873. _90:;    bsr.w   set_gmode
  874.  
  875.         move.w  _color1,r0
  876.         move.w  r0,color
  877.         bsr.w   set_color
  878.  
  879.         move.w  r4,r5
  880.         add.w   #9*8*80,r5
  881.         move.w  r5,r6
  882.         move.b  #$55,r1
  883.         move.w  #7*8,r3
  884. _93:    move.w  #16,r2
  885. _92:    move.b  (r5.w){s1},r0
  886.         move.b  r1,(r5.w){s1}
  887.         inc.w   r5
  888.         dbf.w   r2,_92
  889.         ror.b   #1,r1
  890.         addq.w  #80-16,r5
  891.         dec.w   r3
  892.         bne.b   _93
  893.  
  894. _91:    move.w  _color2,r0
  895.         move.w  r0,color
  896.         bsr.w   set_color
  897.  
  898.         ror.b   #1,r1
  899.         move.w  #7*8,r3
  900. _96:    move.w  #16,r2
  901. _95:    move.b  (r6.w){s1},r0
  902.         move.b  r1,(r6.w){s1}
  903.         inc.w   r6
  904.         dbf.w   r2,_95
  905.         ror.b   #1,r1
  906.         addq.w  #80-16,r6
  907.         dec.w   r3
  908.         bne.b   _96
  909.  
  910.         bsr.w   maus_on
  911. _76:    bsr.w   maus_read
  912.         tst.b   #3,r0
  913.         bne.b   _62
  914.  
  915.         move.w  xpos,r0
  916.         sub.w   xpos1,r0
  917.         bmi.b   _20
  918.         cmp.w   #16*8,r0
  919.         blo.b   _21
  920. _20:    eor.w   r0,r0
  921.         eor.w   r1,r1
  922.         br.b    _29
  923. _21:    lsr.w   #3,r0
  924.  
  925.         move.w  ypos,r1
  926.         sub.w   ypos1,r1
  927.         bmi.b   _22
  928.         cmp.w   #9*8,r1
  929.         blo.b   _23
  930. _22:    eor.w   r0,r0
  931.         eor.w   r1,r1
  932. _23:    lsr.w   #3,r1
  933.         add.w   r0,r1
  934.         and.b   #$0f,r1
  935.  
  936.  
  937. _29:    cmp.w   r0,_color1
  938.         bne.b   _24
  939.         cmp.w   r1,_color2
  940.         beq.b   _76
  941. _24:    move.w  r0,_color1
  942.         move.w  r1,_color2
  943.         bsr.w   maus_off
  944.         br.w    _90
  945.  
  946.  
  947. _62:    move.b  r0,r3
  948.         bsr.w   maus_off
  949.  
  950.         move.w  xpos,r0
  951.         sub.w   xpos1,r0
  952.         bmi.b   _60
  953.         cmp.w   #16*8,r0
  954.         bhs.b   _60
  955.         lsr.w   #3,r0
  956.  
  957.         move.w  ypos,r1
  958.         sub.w   ypos1,r1
  959.         bmi.b   _60
  960.         cmp.w   #9*8,r1
  961.         bhs.b   _60
  962.         lsr.w   #3,r1
  963.         add.w   r0,r1
  964.         and.b   #$0f,r1
  965.  
  966.         move.w  r0,color1
  967.         move.w  r1,color2
  968.  
  969.         move.b  #0,auto_color
  970.         cmp.b   #2,r3
  971.         bne.b   _61
  972.         br.w    _14
  973.  
  974.  
  975. _60:    move.b  #-1,auto_color
  976.         move.w  color1,r0
  977.         or.w    r0,r0
  978.         bne.b   _64
  979.         inc.w   r0
  980.         move.w  r0,color1
  981. _64:    move.w  r0,color2
  982.  
  983. _61:    move.w  (sp)+,r4
  984.         move.w  #bild_save,r6
  985.         bsr.w   set_gmode1
  986.         
  987.         move.w  #$3c4,r1
  988.         move.w  #$0102,r0   ; plane 0 schreiben
  989.         out.w   r0,r1
  990.         bsr.w   _600
  991.         move.w  #$0202,r0   ; plane 1 schreiben
  992.         out.w   r0,r1
  993.         bsr.w   _600
  994.         move.w  #$0402,r0   ; plane 2 schreiben
  995.         out.w   r0,r1
  996.         bsr.w   _600
  997.         move.w  #$0802,r0   ; plane 3 schreiben
  998.         out.w   r0,r1
  999.         bsr.w   _600
  1000.         move.w  #$0f02,r0   ; plane 0-3 schreiben
  1001.         out.w   r0,r1
  1002.  
  1003. _80:    bsr.w   maus_read
  1004.         cmp.b   #0,r0
  1005.         bne.b   _80
  1006.  
  1007. _82:    bsr.w   read_if_ch
  1008.         beq.b   _81
  1009.         bsr.w   read_ch
  1010.         br.b    _82
  1011. _81:
  1012.  
  1013.         movem.l (sp)+,r0-r7
  1014.         rts.w
  1015.  
  1016. even
  1017. _color1:        dc.w    0
  1018. _color2:        dc.w    0
  1019.  
  1020. _500:   move.w  r4,r5
  1021.         move.w  #4*32,r3
  1022. _520:   move.w  #4,r2
  1023. _510:   move.l  (r5.w){s1},r0
  1024.         move.l  r0,(r6.w)
  1025.         addq.l  #4,r5
  1026.         addq.l  #4,r6
  1027.         dbf.w   r2,_510
  1028.         add.w   #80-16,r5
  1029.         dec.w   r3
  1030.         bne.b   _520
  1031.         rts.w
  1032.  
  1033.  
  1034. _600:   move.w  r4,r5
  1035.         move.w  #4*32,r3
  1036. _620:   move.w  #4,r2
  1037. _610:   move.l  (r6.w),r0
  1038.         move.l  r0,(r5.w){s1}
  1039.         addq.l  #4,r5
  1040.         addq.l  #4,r6
  1041.         dbf.w   r2,_610
  1042.         add.w   #80-16,r5
  1043.         dec.w   r3
  1044.         bne.b   _620
  1045.         rts.w
  1046.  
  1047.  
  1048. change_color:
  1049.  
  1050.         move.w  color1,r6
  1051.         lsl.w   #1,r6
  1052.         add.w   color1,r6
  1053.         add.w   #palette,r6
  1054.  
  1055.         move.w  #0,color
  1056.  
  1057. ;        bsr.w   set_gmode
  1058.         eor.l   r0,r0
  1059.         dec.l   r0
  1060.  
  1061.         move.w  #2,r3
  1062.         move.w  r4,r5
  1063.  
  1064. _20:    move.w  #64,r2
  1065.         bsr.w   set_color
  1066.  
  1067. _10:    move.l  r0,(r5.w){s1}
  1068.         move.l  r0,4.b(r5.w){s1}
  1069.         move.l  r0,8.b(r5.w){s1}
  1070.         move.l  r0,12.b(r5.w){s1}
  1071.         add.w   #80,r5
  1072.         dbf.w   r2,_10
  1073.  
  1074.         move.w  color1,r2
  1075.         move.w  r2,color
  1076.         dec.w   r3
  1077.         bne.b   _20
  1078.  
  1079. _60:    bsr.w   maus_read
  1080.         or.b    r0,r0
  1081.         bne.b   _60
  1082.  
  1083. _50: ;   bsr.w   set_gmode
  1084.         move.w  #15,color
  1085.         bsr.w   set_color
  1086.         move.w  r4,r5
  1087.         add.w   #4*80,r5
  1088.         eor.l   r0,r0
  1089.         dec.l   r0
  1090.  
  1091.         bsr.w   _200
  1092.         add.w   #4*80,r5
  1093.         bsr.w   _200
  1094.         add.w   #4*80,r5
  1095.         bsr.w   _200
  1096.  
  1097.         move.w  #0,color
  1098.         bsr.w   set_color
  1099.  
  1100.         move.w  r4,r3
  1101.         add.w   #4*80,r3
  1102.         move.b  #3,m1
  1103. _40:
  1104.         eor.w   r0,r0
  1105.         move.b  (r6.w),r0
  1106.         inc.w   r6
  1107.         and.w   #$3f,r0
  1108.         bne.b   _41
  1109.         move.w  r3,r5
  1110.         move.b  #$40,r1
  1111.         br.b    _42
  1112. _41:    move.w  r0,r5
  1113.         lsr.w   #2,r5
  1114.         add.w   r3,r5
  1115.         lsl.b   #1,r0
  1116.         not.b   r0
  1117.         and.b   #$07,r0
  1118.         eor.b   r1,r1
  1119.         bset.w  r0,r1
  1120. _42:    move.w  #16,r2
  1121. _30:    move.b  (r5.w){s1},r0
  1122.         move.b  r1,(r5.w){s1}
  1123.         addq.w  #80,r5
  1124.         dbf.w   r2,_30
  1125.         add.w   #20*80,r3
  1126.         dec.b   m1
  1127.         bne.b   _40
  1128.         subq.w  #3,r6
  1129.  
  1130.         bsr.w   maus_read
  1131.         eor.w   r3,r3
  1132.         or.b    r0,r0
  1133.         beq.b   _61
  1134.         dec.w   r3
  1135.         move.w  _500,r0
  1136.         br.b    _62
  1137.  
  1138. _61:    bsr.w   maus_on
  1139. _70:    bsr.w   maus_read
  1140.         tst.b   #3,r0
  1141.         beq.b   _70
  1142.         bsr.w   maus_off
  1143.         cmp.b   #2,r0
  1144.         beq.b   _101
  1145.  
  1146.         move.w  ypos,r0
  1147.         move.w  r0,_500
  1148. _62:    sub.w   ypos1,r0
  1149.         bmi.b   _100
  1150.         cmp.w   #64,r0
  1151.         bhs.b   _100
  1152.         move.b  #22,r1
  1153.         divu.b  r1,m0|r0
  1154.         eor.b   m0,m0
  1155.         move.w  color1,r5
  1156.         add.w   r5,r0
  1157.         lsl.w   #1,r5
  1158.         add.w   r0,r5
  1159.  
  1160.         move.w  xpos,r1
  1161.         sub.w   xpos1,r1
  1162.         bpl.b   _71
  1163.         or.w    r3,r3
  1164.         bne.b   _73
  1165.         cmp.w   #-10,r1
  1166.         blt.b   _100
  1167. _73:    eor.w   r1,r1
  1168. _71:    cmp.w   #128,r1
  1169.         blo.b   _72
  1170.         or.w    r3,r3
  1171.         bne.b   _74
  1172.         cmp.w   #128+10,r1
  1173.         bhs.b   _100
  1174. _74:    move.w  #127,r1
  1175. _72:    lsr.b   #1,r1
  1176.         move.b  r1,palette(r5.w)
  1177.         bsr.w   set_palette
  1178.         move.b  #1,color_changed
  1179.         br.w    _50
  1180. _100:   bclr.w  #0,sr
  1181.         rts.w
  1182. _101:   bset.w  #0,sr
  1183.         rts.w
  1184.  
  1185.  
  1186. _200:   move.w  #16,r2
  1187. _201:   move.l  r0,(r5.w){s1}
  1188.         move.l  r0,4.b(r5.w){s1}
  1189.         move.l  r0,8.b(r5.w){s1}
  1190.         move.l  r0,12.b(r5.w){s1}
  1191.         addq.w  #80,r5
  1192.         dbf.w   r2,_201
  1193.         rts.w
  1194. _500:   dc.w    0
  1195.  
  1196.  
  1197. get_dat:
  1198.         move.w  s0,-(sp)
  1199.  
  1200.         move.l  #'tad.',name2
  1201.         move.w  #$3d02,r0       ; Datei oeffnen
  1202.         move.w  #name,r1
  1203.         trap    #$21
  1204.         bcs.w   _100            ; Fehler? dann aufhoeren
  1205.         move.w  r0,r3           ; handle nach r3
  1206.  
  1207.         move.w  s3,r0
  1208.         move.w  r0,s0
  1209.  
  1210.         move.w  #$4202,r0
  1211.         eor.w   r1,r1
  1212.         eor.w   r2,r2
  1213.         trap    #$21
  1214.         lsl.l   #16,r1
  1215.         move.w  r0,r1
  1216.         cmp.l   #308278,r1      ; 256 Farben bmp
  1217.         beq.b   _40
  1218.         move.w  #$4200,r0
  1219.         eor.w   r1,r1
  1220.         eor.w   r2,r2
  1221.         trap    #$21
  1222.  
  1223.         move.w  #$3f00,r0
  1224.         move.w  #640*480/8+62,r2; max  lesen
  1225.         eor.w   r1,r1
  1226.         trap    #$21
  1227.         move.w  r0,r1
  1228.  
  1229.         move.w  #$3e00,r0       ; Datei schliessen
  1230.         trap    #$21
  1231.  
  1232.         cmp.w   r2,r1
  1233.         beq.w   _55             ; 2 Farben bmp
  1234.         cmp.w   #640*480/8,r1
  1235.         beq.w   _50             ; screen format
  1236.  
  1237. _19:    eor.w   r5,r5
  1238.         eor.w   r6,r6
  1239.         eor.w   r1,r1
  1240.  
  1241.  
  1242.         move.w  #480/ycount,r3
  1243. _27:    move.b  #80,m0
  1244. _26:    move.w  #ycount,r2
  1245. _20:    dec.b   r1
  1246.         bpl.b   _21
  1247.         dec.b   m1
  1248.         bpl.b   _25
  1249.         move.b  (r5.w),r1
  1250.         inc.w   r5
  1251.         eor.b   r0,r0
  1252.         eor.b   m1,m1
  1253.         or.b    r1,r1
  1254.         bpl.b   _22
  1255.         and.b   #$7f,r1
  1256.         br.b    _21
  1257.  
  1258. _22:    move.b  r1,m1
  1259. _25:    eor.b   r1,r1
  1260.         move.b  (r5.w),r0
  1261.         inc.w   r5
  1262.  
  1263. _21:    move.b  r0,(r6.w){s2}
  1264.         add.w   #80,r6
  1265.         dbf.w   r2,_20
  1266.         sub.w   #ycount*80-1,r6
  1267.         dec.b   m0
  1268.         bne.b   _26
  1269.         add.w   #(ycount-1)*80,r6
  1270.         dec.w   r3
  1271.         bne.b   _27
  1272.         br.w    _60
  1273.  
  1274.  
  1275. _count:  dc.w    640*480/(15*1024)
  1276. _buf1=40*1024
  1277. _buf2=$3e
  1278.  
  1279. _49:    move.w  #$3e00,r0       ; Datei schliessen
  1280.         trap    #$21
  1281.         bset.w  #0,sr
  1282.         br.w    _100
  1283.  
  1284. _40:    move.w  #$4200,r0
  1285.         eor.w   r2,r2
  1286.         move.w  #1078,r1
  1287.         trap    #$21
  1288.         bcs.w   _49
  1289.  
  1290.         move.w  #640*480/(15*1024),_count{s6}
  1291.         move.w  #_buf2,r6
  1292.  
  1293. _41:    move.w  #$3f00,r0        ; 15 kByte
  1294.         move.w  #15*1024,r2
  1295.         move.w  #_buf1,r1         ; in buf1 einlesen
  1296.         trap    #$21
  1297.         bcs.w   _49              ; Fehler? dann aufhoeren
  1298.         cmp.w   #15*1024,r0      ; ganzen Block gelesen
  1299.         bne.b   _49              ; nein: dann aufhoeren
  1300.  
  1301.         move.w  #_buf1,r5
  1302.         move.w  #15*1024/8,r4
  1303. _43:    move.w  #8,r2
  1304. _42:    move.b  (r5.w),r0
  1305.         inc.w   r5
  1306.         dec.b   r0
  1307.         add.b   #1,r0
  1308.         rocl.b  #1,m0
  1309.         dbf.w   r2,_42
  1310.         not.b   m0
  1311.         move.b  m0,(r6.w)
  1312.         inc.w   r6
  1313.         dec.w   r4
  1314.         bne.b   _43
  1315.         dec.w   _count{s6}
  1316.         bne.b   _41
  1317.         move.w  #$3e00,r0       ; Datei schliessen
  1318.         trap    #$21
  1319.  
  1320. _55:    move.w  #$3e,r5
  1321.         move.w  #480,r3
  1322.         move.w  #479*80,r6
  1323. _57:    move.w  #640/8/4,r2
  1324. _56:    move.l  (r5.w),r0       ;gelesene Daten direkt in bitmap
  1325.         addq.w  #4,r5
  1326.         not.l   r0
  1327.         move.l  r0,(r6.w){s2}
  1328.         addq.w  #4,r6
  1329.         dbf.w   r2,_56
  1330.         sub.w   #640/8*2,r6
  1331.         dec.w   r3
  1332.         bne.b   _57
  1333.         br.b    _60
  1334.  
  1335. _50:    eor.w   r5,r5
  1336.         move.w  #640*480/8/4,r2
  1337. _51:    move.l  (r5.w),r0       ;gelesene Daten direkt in bitmap
  1338.         move.l  r0,(r5.w){s2}
  1339.         addq.w  #4,r5
  1340.         dbf.w   r2,_51
  1341.  
  1342. _60:    bclr.w  #0,sr
  1343. _100:   move.w  (sp)+,s0
  1344.         rts.w
  1345.  
  1346.  
  1347.  
  1348. get_bild:
  1349.         move.b  #0,data_changed
  1350.         bsr.w   get_dat
  1351.         bcs.w   _100
  1352.         eor.w   r5,r5
  1353.         move.w  #80*480/4,r2
  1354. _61:    not.l   (r5.w){s2}
  1355.  
  1356.         move.b  (r5.w){s2},r0
  1357.         move.b  3.b(r5.w){s2},m0
  1358.         move.b  m0,(r5.w){s2}
  1359.         move.b  r0,3.b(r5.w){s2}
  1360.         move.b  1.b(r5.w){s2},r0
  1361.         move.b  2.b(r5.w){s2},m0
  1362.         move.b  m0,1.b(r5.w){s2}
  1363.         move.b  r0,2.b(r5.w){s2}
  1364.  
  1365.         addq.w  #4,r5
  1366.         dbf.w   r2,_61
  1367.  
  1368.         move.b  #0,color_changed
  1369.         move.l  #color_file,name2
  1370.         move.w  #$3d00,r0       ; Datei oeffnen
  1371.         move.w  #name,r1
  1372.         trap    #$21
  1373.         bcc.w   _b50            ; kein Fehler? dann weiter
  1374. _b5:    move.w  #0,fillcount
  1375.         move.w  #3*16/4,r2
  1376.         move.w  #palette_org,r5
  1377.         move.w  #palette,r6
  1378. _b10:   move.l  (r5.w),r0
  1379.         addq.w  #4,r5
  1380.         move.l  r0,(r6.w)
  1381.         addq.w  #4,r6
  1382.         dbf.w   r2,_b10
  1383.         bsr.w   set_palette
  1384.         br.b    _b20
  1385.  
  1386. _b50:   move.w  r0,r3           ; handle nach r3
  1387.         move.w  #$3f00,r0
  1388.         move.w  #3*16+2+maxfill*4,r2       ; max  lesen
  1389.         move.w  #palette,r1
  1390.         trap    #$21
  1391.  
  1392.         move.w  #$3e00,r0       ; Datei schliessen
  1393.         trap    #$21
  1394.  
  1395.         bsr.w   set_palette
  1396.  
  1397.         move.w  #fillbuff,r5
  1398.         move.w  fillcount,r2
  1399.         or.w    r2,r2
  1400.         beq.b   _b20
  1401.         cmp.w   #maxfill,r2
  1402.         bhs.b   _b5             ; kann wohl nicht stimmen
  1403.         
  1404.         move.w  r2,r0
  1405.         lsl.w   #2,r0
  1406.         move.w  r5,r6
  1407.         add.w   r0,r5
  1408.         add.w   r0,r6
  1409.         add.w   r2,r6
  1410.         add.w   r2,r6
  1411.  
  1412. _b30:   subq.w  #4,r5
  1413.         subq.w  #6,r6
  1414.         move.l  (r5.w),r0
  1415.         move.w  r0,r1
  1416.         and.w   #$0fff,r1
  1417.         move.w  r1,(r6.w)
  1418.         lsr.l   #8,r0
  1419.         lsr.w   #4,r0
  1420.         move.w  r0,2.b(r6.w)
  1421.         eor.w   r0,r0
  1422.         rol.l   #12,r0
  1423.         lsl.w   #4,r0
  1424.         rol.l   #4,r0
  1425.         move.w  r0,4.b(r6.w)
  1426.         dbf.w   r2,_b30
  1427.  
  1428. _b20:   move.w  #0,color
  1429.         bsr.w   fill_screen
  1430.         bsr.w   fill_all
  1431.         move.b  #-1,auto_color
  1432.         move.w  #1,color1
  1433.         move.w  #1,color2
  1434.         bclr.w  #0,sr
  1435. _100:   rts.w
  1436.  
  1437.  
  1438. edit_bild:
  1439.         movem.l r0-r7,-(sp)
  1440.  
  1441.  
  1442.         eor.w   r5,r5
  1443.         move.w  #480*80,r2
  1444. _5:     move.w  2.b(r5.w){s2},r0
  1445.         move.b  m0,(r5.w){s3}
  1446.         move.b  r0,1.b(r5.w){s3}
  1447.         move.w  (r5.w){s2},r0
  1448.         move.b  m0,2.b(r5.w){s3}
  1449.         move.b  r0,3.b(r5.w){s3}
  1450.         addq.w  #4,r5
  1451.         dbf.w   r2,_5
  1452.  
  1453.         bsr.w   set_grau_palette
  1454.  
  1455. _2:     move.w  #0,_xoff
  1456.         move.w  xpos,r0
  1457.         sub.w   #80,r0
  1458.         bmi.b   _90
  1459.         lsr.w   #3,r0
  1460.         cmp.w   #(640-160)/8,r0
  1461.         bls.b   _91
  1462.         move.w  #(640-160)/8,r0
  1463. _91:    move.w  r0,_xoff
  1464. _90:
  1465.         move.w  #0,_yoff
  1466.         move.w  ypos,r0
  1467.         sub.w   #60,r0
  1468.         bmi.b   _92
  1469.         cmp.w   #(480-120),r0
  1470.         bls.b   _93
  1471.         move.w  #(480-120),r0
  1472. _93:    move.w  r0,_yoff
  1473. _92:
  1474.  
  1475.  
  1476. _1:     move.w  #$0b,color
  1477.         bsr.w   fill_screen
  1478.  
  1479.         bsr.w   set_gmode0
  1480. _20:    move.w  #119,r1
  1481. _10:    bsr.w   _line
  1482.         dec.w   r1
  1483.         bpl.b   _10
  1484.  
  1485.         bsr.w   maus_on
  1486. _29:    bsr.w   maus_read
  1487.         tst.b   #7,r0
  1488.         bne.b   _29
  1489.  
  1490. _30:    bsr.w   maus_read
  1491.         tst.b   #7,r0
  1492.         beq.b   _40
  1493.         cmp.b   #3,r0
  1494.         bhs.b   _41
  1495.         cmp.b   #2,r0
  1496.         beq.b   _35
  1497.         bsr.w   _draw
  1498.         br.b    _30
  1499. _35:    bsr.w   _scroll
  1500.         br.b    _30
  1501.  
  1502. _40:    bsr.w   read_if_ch
  1503.         beq.b   _30
  1504.         bsr.w   read_ch
  1505.  
  1506.         cmp.b   #$01,m0
  1507.         beq.w   _100
  1508.         cmp.b   #$12,m0
  1509.         beq.w   _50
  1510.         cmp.b   #' ',r0
  1511.         bne.b   _30
  1512.  
  1513. _41:    bsr.w   maus_off
  1514.         bsr.w   set_gmode1
  1515.         move.w  #640*480/32,r2
  1516.         eor.w   r5,r5
  1517. _59:    move.l  (r5.w){s3},r0
  1518.         move.l  r0,(r5.w){s1}
  1519.         addq.w  #4,r5
  1520.         dbf.w   r2,_59
  1521.  
  1522.         bsr.w   set_gmode1
  1523.         move.w  #$3c4,r1
  1524.         move.w  #$0102,r0   ; plane 2+3 schreiben
  1525.         out.w   r0,r1
  1526.         
  1527.         muls.w  #80,_yoff,r6        
  1528.         add.w   _xoff,r6
  1529.         eor.l   r0,r0
  1530.         move.w  #120,r1
  1531. _71:    move.w  #5,r2
  1532. _70:    
  1533.         move.l  r0,(r6.w){s1}
  1534.         addq.w  #4,r6
  1535.         dbf.w   r2,_70
  1536.         add.w   #80-5*4,r6
  1537.         dec.w   r1
  1538.         bne.b   _71
  1539.  
  1540.         move.w  #$3c4,r1
  1541.         move.w  #$0f02,r0   ; plane 0+1+2+3 schreiben
  1542.         out.w   r0,r1
  1543.         
  1544.  
  1545.         bsr.w   maus_on
  1546. _62:    bsr.w   maus_read
  1547.         tst.b   #7,r0
  1548.         bne.b   _62
  1549.  
  1550. _60:    bsr.w   maus_read
  1551.         tst.b   #7,r0
  1552.         beq.b   _61
  1553.         bsr.w   maus_off
  1554.         cmp.b   #1,r0
  1555.         beq.w   _2
  1556.         br.w    _1
  1557.  
  1558. _61:    bsr.w   read_if_ch
  1559.         beq.b   _60
  1560.         bsr.w   read_ch
  1561.         cmp.b   #$01,m0
  1562.         beq.b   _100
  1563.         cmp.b   #$12,m0
  1564.         beq.b   _50
  1565.         cmp.b   #' ',r0
  1566.         bne.b   _60
  1567.         bsr.w   maus_off
  1568.         br.w    _1
  1569.  
  1570. _50:    eor.w   r5,r5
  1571.         move.w  #480*80,r2
  1572. _6:     
  1573.         move.b  (r5.w){s3},m0
  1574.         move.b  1.b(r5.w){s3},r0
  1575.         move.w  r0,2.b(r5.w){s2}
  1576.         move.b  2.b(r5.w){s3},m0
  1577.         move.b  3.b(r5.w){s3},r0
  1578.         move.w  r0,(r5.w){s2}
  1579.         addq.w  #4,r5
  1580.         dbf.w   r2,_6
  1581.  
  1582.  
  1583.         move.b  #1,data_changed
  1584. _100:   bsr.w   set_palette
  1585.         bsr.w   maus_off
  1586.         movem.l (sp)+,r0-r7
  1587.         rts.w
  1588.  
  1589. _line:  move.w  r1,r5
  1590.         add.w   _yoff,r5
  1591.         muls.w  #80,r5,r5
  1592.         add.w   _xoff,r5
  1593.         
  1594.         move.w  r1,r6
  1595.         muls.l  #80*4,r6,r6
  1596.  
  1597.         move.b  240{s1},r0      ;grau in latch
  1598.                 
  1599.         move.w  #20,r2
  1600.         eor.l   r0,r0
  1601. _l20:   move.b  (r5.w){s3},r0
  1602.         inc.w   r5
  1603.         move.l  _tab(r0*4),r3
  1604.         move.l  r3,(r6.w){s1}
  1605.         move.l  r3,80.b(r6.w){s1}
  1606.         move.l  r3,160(r6.w){s1}
  1607.         addq.w  #4,r6
  1608.         
  1609.         dbf.w   r2,_l20
  1610.         rts.w
  1611.  
  1612.  
  1613. _draw:
  1614.         move.w  _xoff,r4
  1615.         lsl.w   #3,r4
  1616.         
  1617.         move.l  ypos,r0
  1618.         move.w  r0,_ypos
  1619.         lsr.w   #2,r0
  1620.         add.w   _yoff,r0
  1621.         muls.l  #640,r0,r0
  1622.         move.l  xpos,r1
  1623.         move.w  r1,_xpos
  1624.         lsr.w   #2,r1
  1625.         add.w   r4,r1
  1626.         add.l   r1,r0
  1627.         eor.b   #7,r0
  1628.         move.b  #$b3,_d10+3     ; bclr.l
  1629.         move.b  #$73,_d11       ; bcc.b
  1630.         bchg.l  r0,0{s3}
  1631.         bcs.b   _d21
  1632.         move.b  #$ab,_d10+3     ; bset.l
  1633.         move.b  #$72,_d11       ; bcs.b
  1634.         
  1635. _d21:   move.w  _ypos,r1
  1636.         lsr.w   #2,r1
  1637.         bsr.w   maus_off0
  1638.         bsr.w   _line
  1639.         bsr.w   maus_on
  1640.  
  1641. _d20:   move.w  xpos,r0
  1642.         cmp.w   _xpos,r0
  1643.         bne.b   _d22
  1644.         move.l  ypos,r0
  1645.         sub.w   _ypos,r0
  1646.         bne.b   _d23
  1647.         
  1648.         bsr.w   maus_read
  1649.         cmp.b   #1,r0
  1650.         bne.b   _d100
  1651.  
  1652. _d22:   move.l  ypos,r0
  1653.         sub.w   _ypos,r0
  1654.         beq.b   _d24
  1655. _d23:   asr.w   #8,r0
  1656.         or.b    #1,r0
  1657. _d24:   add.w   _ypos,r0
  1658.         move.w  r0,_ypos
  1659.  
  1660.         lsr.w   #2,r0
  1661.         add.w   _yoff,r0
  1662.         muls.l  #640,r0,r0
  1663.  
  1664.         move.l  xpos,r1
  1665.         sub.w   _xpos,r1
  1666.         beq.b   _d25
  1667.         asr.w   #8,r1
  1668.         or.b    #1,r1
  1669. _d25:   add.w   _xpos,r1
  1670.         move.w  r1,_xpos
  1671.  
  1672.         lsr.w   #2,r1
  1673.         add.w   r4,r1
  1674.         add.l   r1,r0
  1675.         eor.b   #7,r0
  1676. _d10:   bclr.l  r0,0{s3}
  1677. _d11:   bcc.b   _d20        
  1678.         br.b    _d21
  1679.         
  1680. _d100:  rts.w
  1681.  
  1682.  
  1683. _scroll:        
  1684.         move.w  xpos,r0
  1685.         sub.w   _xoff,r0
  1686.         move.w  r0,_xscroll
  1687.         move.w  ypos,r0
  1688.         lsl.w   #3,r0
  1689.         sub.w   _yoff,r0
  1690.         move.w  r0,_yscroll
  1691.         
  1692. _s10:   bsr.w   maus_read
  1693.         cmp.b   #2,r0
  1694.         bne.b   _d100
  1695.  
  1696.         move.w  xpos,r0
  1697.         sub.w   _xscroll,r0
  1698.         bpl.b   _s11
  1699.         eor.w   r0,r0
  1700. _s11:   cmp.w   #(640-160)/8,r0
  1701.         bls.b   _s12
  1702.         move.w  #(640-160)/8,r0
  1703. _s12:
  1704.         move.w  ypos,r1
  1705.         lsl.w   #3,r1
  1706.         sub.w   _yscroll,r1
  1707.         bpl.b   _s13
  1708.         eor.w   r1,r1
  1709. _s13:   cmp.w   #(480-120),r1
  1710.         bls.b   _s14
  1711.         move.w  #(480-120),r1
  1712. _s14:
  1713.         cmp.w   r0,_xoff
  1714.         bne.b   _s20
  1715.         cmp.w   r1,_yoff
  1716.         beq.b   _s10
  1717. _s20:   move.w  r0,_xoff
  1718.         move.w  r1,_yoff
  1719.  
  1720.         bsr.w   maus_off0
  1721.         move.w  #119,r1
  1722. _s30:   bsr.w   _line
  1723.         dec.w   r1
  1724.         bpl.b   _s30
  1725.         bsr.w   maus_on
  1726.         br.b    _s10
  1727.  
  1728. _xscroll:       dc.w    0
  1729. _yscroll:       dc.w    0
  1730.  
  1731. _xpos:  dc.w    0
  1732. _ypos:  dc.w    0
  1733.  
  1734. _xoff:  dc.w    (320-80)/8
  1735. _yoff:  dc.w    240-60
  1736. _tab:   dc.l    $00000000,$0f000000,$f0000000,$ff000000
  1737.         dc.l    $000f0000,$0f0f0000,$f00f0000,$ff0f0000
  1738.         dc.l    $00f00000,$0ff00000,$f0f00000,$fff00000
  1739.         dc.l    $00ff0000,$0fff0000,$f0ff0000,$ffff0000
  1740.         dc.l    $00000f00,$0f000f00,$f0000f00,$ff000f00
  1741.         dc.l    $000f0f00,$0f0f0f00,$f00f0f00,$ff0f0f00
  1742.         dc.l    $00f00f00,$0ff00f00,$f0f00f00,$fff00f00
  1743.         dc.l    $00ff0f00,$0fff0f00,$f0ff0f00,$ffff0f00
  1744.         dc.l    $0000f000,$0f00f000,$f000f000,$ff00f000
  1745.         dc.l    $000ff000,$0f0ff000,$f00ff000,$ff0ff000
  1746.         dc.l    $00f0f000,$0ff0f000,$f0f0f000,$fff0f000
  1747.         dc.l    $00fff000,$0ffff000,$f0fff000,$fffff000
  1748.         dc.l    $0000ff00,$0f00ff00,$f000ff00,$ff00ff00
  1749.         dc.l    $000fff00,$0f0fff00,$f00fff00,$ff0fff00
  1750.         dc.l    $00f0ff00,$0ff0ff00,$f0f0ff00,$fff0ff00
  1751.         dc.l    $00ffff00,$0fffff00,$f0ffff00,$ffffff00
  1752.  
  1753.         dc.l    $0000000f,$0f00000f,$f000000f,$ff00000f
  1754.         dc.l    $000f000f,$0f0f000f,$f00f000f,$ff0f000f
  1755.         dc.l    $00f0000f,$0ff0000f,$f0f0000f,$fff0000f
  1756.         dc.l    $00ff000f,$0fff000f,$f0ff000f,$ffff000f
  1757.         dc.l    $00000f0f,$0f000f0f,$f0000f0f,$ff000f0f
  1758.         dc.l    $000f0f0f,$0f0f0f0f,$f00f0f0f,$ff0f0f0f
  1759.         dc.l    $00f00f0f,$0ff00f0f,$f0f00f0f,$fff00f0f
  1760.         dc.l    $00ff0f0f,$0fff0f0f,$f0ff0f0f,$ffff0f0f
  1761.         dc.l    $0000f00f,$0f00f00f,$f000f00f,$ff00f00f
  1762.         dc.l    $000ff00f,$0f0ff00f,$f00ff00f,$ff0ff00f
  1763.         dc.l    $00f0f00f,$0ff0f00f,$f0f0f00f,$fff0f00f
  1764.         dc.l    $00fff00f,$0ffff00f,$f0fff00f,$fffff00f
  1765.         dc.l    $0000ff0f,$0f00ff0f,$f000ff0f,$ff00ff0f
  1766.         dc.l    $000fff0f,$0f0fff0f,$f00fff0f,$ff0fff0f
  1767.         dc.l    $00f0ff0f,$0ff0ff0f,$f0f0ff0f,$fff0ff0f
  1768.         dc.l    $00ffff0f,$0fffff0f,$f0ffff0f,$ffffff0f
  1769.  
  1770.         dc.l    $000000f0,$0f0000f0,$f00000f0,$ff0000f0
  1771.         dc.l    $000f00f0,$0f0f00f0,$f00f00f0,$ff0f00f0
  1772.         dc.l    $00f000f0,$0ff000f0,$f0f000f0,$fff000f0
  1773.         dc.l    $00ff00f0,$0fff00f0,$f0ff00f0,$ffff00f0
  1774.         dc.l    $00000ff0,$0f000ff0,$f0000ff0,$ff000ff0
  1775.         dc.l    $000f0ff0,$0f0f0ff0,$f00f0ff0,$ff0f0ff0
  1776.         dc.l    $00f00ff0,$0ff00ff0,$f0f00ff0,$fff00ff0
  1777.         dc.l    $00ff0ff0,$0fff0ff0,$f0ff0ff0,$ffff0ff0
  1778.         dc.l    $0000f0f0,$0f00f0f0,$f000f0f0,$ff00f0f0
  1779.         dc.l    $000ff0f0,$0f0ff0f0,$f00ff0f0,$ff0ff0f0
  1780.         dc.l    $00f0f0f0,$0ff0f0f0,$f0f0f0f0,$fff0f0f0
  1781.         dc.l    $00fff0f0,$0ffff0f0,$f0fff0f0,$fffff0f0
  1782.         dc.l    $0000fff0,$0f00fff0,$f000fff0,$ff00fff0
  1783.         dc.l    $000ffff0,$0f0ffff0,$f00ffff0,$ff0ffff0
  1784.         dc.l    $00f0fff0,$0ff0fff0,$f0f0fff0,$fff0fff0
  1785.         dc.l    $00fffff0,$0ffffff0,$f0fffff0,$fffffff0
  1786.  
  1787.         dc.l    $000000ff,$0f0000ff,$f00000ff,$ff0000ff
  1788.         dc.l    $000f00ff,$0f0f00ff,$f00f00ff,$ff0f00ff
  1789.         dc.l    $00f000ff,$0ff000ff,$f0f000ff,$fff000ff
  1790.         dc.l    $00ff00ff,$0fff00ff,$f0ff00ff,$ffff00ff
  1791.         dc.l    $00000fff,$0f000fff,$f0000fff,$ff000fff
  1792.         dc.l    $000f0fff,$0f0f0fff,$f00f0fff,$ff0f0fff
  1793.         dc.l    $00f00fff,$0ff00fff,$f0f00fff,$fff00fff
  1794.         dc.l    $00ff0fff,$0fff0fff,$f0ff0fff,$ffff0fff
  1795.         dc.l    $0000f0ff,$0f00f0ff,$f000f0ff,$ff00f0ff
  1796.         dc.l    $000ff0ff,$0f0ff0ff,$f00ff0ff,$ff0ff0ff
  1797.         dc.l    $00f0f0ff,$0ff0f0ff,$f0f0f0ff,$fff0f0ff
  1798.         dc.l    $00fff0ff,$0ffff0ff,$f0fff0ff,$fffff0ff
  1799.         dc.l    $0000ffff,$0f00ffff,$f000ffff,$ff00ffff
  1800.         dc.l    $000fffff,$0f0fffff,$f00fffff,$ff0fffff
  1801.         dc.l    $00f0ffff,$0ff0ffff,$f0f0ffff,$fff0ffff
  1802.         dc.l    $00ffffff,$0fffffff,$f0ffffff,$ffffffff
  1803.  
  1804.  
  1805. fill_all:
  1806.         cmp.b   #$7f,3{s2}
  1807.         bne.b   _00
  1808.         bsr.w   hintergrund_halb
  1809.         br.b    _01
  1810. _00:    cmp.b   #$bf,3{s2}
  1811.         beq.b   _01
  1812.         bsr.w   hintergrund
  1813. _01:    move.w  r0,-(sp)
  1814.         move.w  r2,-(sp)
  1815.         move.w  r5,-(sp)
  1816.  
  1817.         move.w  #fillbuff,r5
  1818.         move.w  fillcount,r2
  1819.         or.w    r2,r2
  1820.         beq.w   _100
  1821.  
  1822. _10:    move.w  (r5.w),r0
  1823.         move.w  r0,xpos
  1824.         move.w  2.b(r5.w),r0
  1825.         move.w  r0,ypos
  1826.         move.w  4.b(r5.w),r0
  1827.  
  1828.         cmp.w   #$0f0f,r0
  1829.         bne.b   _30
  1830.         cmp.b   #$7f,3{s2}
  1831.         beq.b   _30
  1832.         cmp.b   #$bf,3{s2}
  1833.         bne.b   _31
  1834.  
  1835. _30:    move.b  r0,color1
  1836.         move.b  m0,color2
  1837.         bsr.w   fill
  1838.         cmp.l   r0,(r5.w)
  1839.         beq.b   _11
  1840.  
  1841. _31:    move.w  r5,r6
  1842.         addq.w  #6,r6
  1843. _12:    cmp.w   #fillbuff_end,r6
  1844.         bhs.b   _13
  1845.         move.w  (r6.w),r0
  1846.         move.w  r0,-6.b(r6.w)
  1847.         addq.w  #2,r6
  1848.         br.b    _12
  1849. _13:    dec.w   fillcount
  1850.         move.b  #1,color_changed
  1851.         subq.w  #6,r5
  1852. _11:    addq.w  #6,r5
  1853.         bsr.w   read_if_ch
  1854.         beq.b   _20
  1855.  
  1856.         cmp.b   #$49,m0 ; naechstes Bild
  1857.         beq.b   _100
  1858.         cmp.b   #$51,m0 ; vorheriges Bild
  1859.         beq.b   _100
  1860.         cmp.b   #27,r0  ; ESC
  1861.         beq.b   _100
  1862.         cmp.b   #$52,m0 ; EINFG
  1863.         beq.b   _100
  1864.         cmp.b   #$53,m0 ; DEL
  1865.         beq.b   _100
  1866.         cmp.b   #$47,m0 ; POS1
  1867.         beq.b   _100
  1868.         cmp.b   #$12,m0 ; e
  1869.         beq.b   _100
  1870.         bsr.w   read_ch
  1871. _20:    dec.w   r2
  1872.         bne.w   _10             
  1873.  
  1874. _100:   move.w  (sp)+,r5
  1875.         move.w  (sp)+,r2
  1876.         move.w  (sp)+,r0
  1877.         rts.w
  1878.  
  1879.         
  1880. eingabe:
  1881.         bsr.w   read_ch
  1882.  
  1883.         cmp.b   #' ',r0
  1884.         beq.w   __00
  1885.         cmp.b   #$49,m0 ; naechstes Bild
  1886.         beq.b   _n00
  1887.         cmp.b   #$51,m0 ; vorheriges Bild
  1888.         beq.b   _v00
  1889.         cmp.b   #$52,m0 ; EINFG
  1890.         beq.w   _ein
  1891.         cmp.b   #$53,m0 ; DEL
  1892.         beq.w   _del
  1893.         cmp.b   #$1f,m0 ; s
  1894.         beq.w   _s00
  1895.         cmp.b   #$47,m0 ; POS1
  1896.         beq.w   _uebersicht
  1897.         cmp.b   #$12,m0 ; e
  1898.         beq.w   _edit
  1899.  
  1900.         cmp.b   #$19,m0 ; p
  1901.         bne.b   _100
  1902.         bsr.w   hardcopy
  1903.  
  1904. _100:   rts.w
  1905.  
  1906.  
  1907. __00:   bsr.w   hintergrund
  1908.         bsr.w   fill_all
  1909.         br.w    _100
  1910. _n00:   bsr.w   write_bild
  1911. _n01:   inc.b   name1+1
  1912.         cmp.b   #'9',name1+1
  1913.         bls.b   _n10
  1914.         move.b  #'0',name1+1
  1915.         inc.b   name1
  1916.         cmp.b   #'9',name1
  1917.         bls.b   _n10
  1918.         move.b  #'0',name1
  1919. _n10:   bsr.w   get_bild
  1920.         bcs.b   _n01
  1921.         br.b    _100
  1922.  
  1923. _v00:   bsr.w   write_bild
  1924. _v01:   dec.b   name1+1
  1925.         cmp.b   #'0',name1+1
  1926.         bhs.b   _v10
  1927.         move.b  #'9',name1+1
  1928.         dec.b   name1
  1929.         cmp.b   #'0',name1
  1930.         bhs.b   _v10
  1931.         move.b  #'9',name1
  1932. _v10:   bsr.w   get_bild
  1933.         bcs.b   _v01
  1934.         br.b    _100
  1935.  
  1936. _s00:   bsr.w   write_bmp
  1937.         br.b    _100
  1938.  
  1939. _ein:   bsr.w   get_bild
  1940.         br.b    _100
  1941.  
  1942. _edit:  bsr.w   edit_bild
  1943. ;        move.w  #0,fillcount
  1944.         move.w  #0,color
  1945.         bsr.w   fill_screen
  1946. ;        bsr.w   hintergrund
  1947.         bsr.w   fill_all
  1948. ;        move.b  #1,color_changed
  1949.         br.w    _100
  1950.  
  1951. _del:   
  1952.         move.w  #$0211,r0
  1953.         trap    #$16
  1954.         and.b   #$03,r0
  1955.         beq.b   _d0
  1956.  
  1957.         move.w  name1,r6
  1958.         move.l  #color_file,name2
  1959.  
  1960. _d20:   move.w  #$3d02,r0       ; Datei oeffnen
  1961.         move.w  #name,r1
  1962.         trap    #$21
  1963.         bcs.b   _d10            ; kein Fehler? dann weiter
  1964.  
  1965.         move.w  r0,r3           ; handle nach r3
  1966.         move.w  #$4200,r0
  1967.         eor.w   r2,r2
  1968.         move.w  #3*16,r1
  1969.         trap    #$21
  1970.  
  1971.         move.w  #$4000,r0
  1972.         move.w  #2,r2
  1973.         move.w  #_d50,r1
  1974.         trap    #$21
  1975.  
  1976.         move.w  #$4000,r0
  1977.         eor.w   r2,r2
  1978.         trap    #$21
  1979.  
  1980.         move.w  #$3e00,r0       ; Datei schliessen
  1981.         trap    #$21
  1982.  
  1983. _d10:   inc.b   name1+1
  1984.         cmp.b   #'9',name1+1
  1985.         bls.b   _d11
  1986.         move.b  #'0',name1+1
  1987.         inc.b   name1
  1988.         cmp.b   #'9',name1
  1989.         bls.b   _d11
  1990.         move.b  #'0',name1
  1991. _d11:   cmp.w   r6,name1
  1992.         bne.b   _d20
  1993.  
  1994. _d0:    move.w  #0,fillcount
  1995.         move.w  #0,color
  1996.         bsr.w   fill_screen
  1997.         bsr.w   fill_all
  1998.         move.b  #1,color_changed
  1999.         br.w    _100
  2000.  
  2001. _d50:   dc.w    0
  2002.  
  2003.         
  2004.  
  2005. _uebersicht:
  2006.         bsr.w   write_bild
  2007.         move.w  #15,color
  2008.         bsr.w   fill_screen
  2009.         bsr.w   black_gitter
  2010.         bsr.w   set_grau_palette
  2011.         move.w  #'00',name1
  2012.         br.w    _u61
  2013.  
  2014. _u60:   bsr.w   read_if_ch
  2015.         beq.b   _u64
  2016.         bsr.w   read_ch
  2017.         cmp.b   #27,r0
  2018.         bne.b   _u60
  2019.         br.w    _n10
  2020.         
  2021. _u64:   inc.b   name1+1
  2022.         cmp.b   #'9',name1+1
  2023.         bls.b   _u61
  2024.         move.b  #'0',name1+1
  2025.         inc.b   name1
  2026.         cmp.b   #'9',name1
  2027.         bls.b   _u61
  2028.         move.b  #'0',name1
  2029.         bsr.w   maus_on
  2030.  
  2031. _u70:   bsr.w   read_if_ch
  2032.         beq.b   _u74
  2033.         bsr.w   read_ch
  2034.         cmp.b   #$19,m0 ; p
  2035.         bne.b   _u79
  2036.         bsr.w   maus_off
  2037.         bsr.w   hardcopy
  2038.         bsr.w   maus_on
  2039.         br.b    _u70
  2040. _u79:   cmp.b   #27,r0
  2041.         bne.w   _u70
  2042.         bsr.w   maus_off
  2043.         br.w    _n10
  2044.  
  2045. _u74:   bsr.w   maus_read
  2046.         tst.b   #1,r0
  2047.         beq.b   _u70
  2048.         bsr.w    maus_off
  2049.         move.w  ypos,r0
  2050.         move.b  #48,r1
  2051.         divs.b  r1,m0|r0
  2052.         cmp.b   #9,r0
  2053.         bls.b   _u71
  2054.         move.b  #9,r0
  2055. _u71:   add.b   #'0',r0
  2056.         move.b  r0,name1
  2057.  
  2058.         move.w  xpos,r0
  2059.         move.b  #64,r1
  2060.         divs.b  r1,m0|r0
  2061.         cmp.b   #9,r0
  2062.         bls.b   _u72
  2063.         move.b  #9,r0
  2064. _u72:   add.b   #'0',r0
  2065.         move.b  r0,name1+1
  2066. _u73:   bsr.w   maus_read
  2067.         tst.b   #3,r0
  2068.         bne.b   _u73
  2069.         br.w    _n10
  2070.  
  2071. _u61:   bsr.w   get_dat
  2072.         bcs.w   _u60
  2073.         
  2074.         eor.w   r6,r6
  2075.         move.w  #64*48/4,r2
  2076.         eor.l   r0,r0
  2077. _u5:    move.l  r0,(r6.w){s3}
  2078.         addq.l  #4,r6
  2079.         dbf.w   r2,_u5        
  2080.  
  2081.         lea.w   bit_tab,r3
  2082.         eor.w   r5,r5
  2083.         eor.w   r6,r6
  2084.  
  2085.         move.w  #48,r1
  2086. _u30:   move.w  #10,r4
  2087. _u20:   move.w  #16,r2
  2088.  
  2089. _u10:   move.b  (r5.w){s2},r0
  2090.         lsr.b   #3,r0
  2091.         move.b  (r3.w,r0.b),r0
  2092.         add.b   r0,(r6.w){s3}
  2093.         move.w  (r5.w){s2},r0
  2094.         exg.b   r0,m0
  2095.         lsr.w   #6,r0
  2096.         and.b   #$1f,r0
  2097.         move.b  (r3.w,r0.b),r0
  2098.         add.b   r0,(r6.w){s3}
  2099.         inc.w   r5
  2100.         inc.w   r6
  2101.  
  2102.         move.b  (r5.w){s2},r0
  2103.         lsr.b   #1,r0
  2104.         and.b   #$1f,r0
  2105.         move.b  (r3.w,r0.b),r0
  2106.         add.b   r0,(r6.w){s3}
  2107.         move.w  (r5.w){s2},r0
  2108.         exg.b   r0,m0
  2109.         lsr.w   #4,r0
  2110.         and.b   #$1f,r0
  2111.         move.b  (r3.w,r0.b),r0
  2112.         add.b   r0,(r6.w){s3}
  2113.         inc.w   r5
  2114.         inc.w   r6
  2115.  
  2116.         move.w  (r5.w){s2},r0
  2117.         exg.b   r0,m0
  2118.         lsr.w   #7,r0
  2119.         and.b   #$1f,r0
  2120.         move.b  (r3.w,r0.b),r0
  2121.         add.b   r0,(r6.w){s3}
  2122.         inc.w   r5
  2123.         move.b  (r5.w){s2},r0
  2124.         lsr.b   #2,r0
  2125.         and.b   #$1f,r0
  2126.         move.b  (r3.w,r0.b),r0
  2127.         add.b   r0,(r6.w){s3}
  2128.         inc.w   r6
  2129.  
  2130.         move.w  (r5.w){s2},r0
  2131.         exg.b   r0,m0
  2132.         lsr.w   #5,r0
  2133.         and.b   #$1f,r0
  2134.         move.b  (r3.w,r0.b),r0
  2135.         add.b   r0,(r6.w){s3}
  2136.         inc.w   r5
  2137.         move.b  (r5.w){s2},r0
  2138.         and.b   #$1f,r0
  2139.         move.b  (r3.w,r0.b),r0
  2140.         add.b   r0,(r6.w){s3}
  2141.         inc.w   r5
  2142.         inc.w   r6
  2143.         dbf.w   r2,_u10
  2144.  
  2145.         subq.w  #64,r6        
  2146.         dec.w   r4
  2147.         bne.b   _u20
  2148.         addq.w  #64,r6
  2149.         dec.w   r1
  2150.         bne.w   _u30
  2151.  
  2152. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2153.  
  2154.         eor.l   r4,r4
  2155.         eor.w   r5,r5
  2156.         eor.l   r3,r3
  2157.         move.w  #64*48,r2
  2158.         eor.l   r0,r0
  2159. _u81:   move.b  (r5.w){s3},r0
  2160.         inc.w   r5
  2161.         cmp.b   #6,r0
  2162.         bls.b   _u86
  2163.         add.l   r0,r3
  2164.         inc.w   r4
  2165. _u86:   dbf.w   r2,_u81
  2166.         inc.l   r3
  2167.         inc.l   r4
  2168.         mulsq.l #10,r4,r4
  2169.  
  2170.         eor.w   r5,r5
  2171.         move.w  #64*48,r2
  2172.  
  2173. _u82:   eor.l   r0,r0
  2174.         eor.l   r1,r1
  2175.         move.b  (r5.w){s3},r0
  2176.         muls.l  r4,r0,r0
  2177.         divu.l  r3,r1|r0
  2178.         cmpq.l  #15,r0
  2179.         bls.b   _u85
  2180.         move.b  #15,r0
  2181. _u85:   move.b  r0,(r5.w){s3}        
  2182.         inc.w   r5
  2183.         dbf.w   r2,_u82
  2184.  
  2185.         
  2186.         eor.w   r0,r0
  2187.         move.b  name1,r0
  2188.         sub.b   #'0',r0
  2189.         move.w  #80*48,r1
  2190.         mulu.w  r1,r0,r1|r0
  2191.         move.w  r0,r6
  2192.         
  2193.         eor.w   r0,r0
  2194.         move.b  name1+1,r0
  2195.         sub.b   #'0',r0
  2196.         lsl.w   #3,r0
  2197.         add.w   r0,r6
  2198.  
  2199.         move.w  #$3ce,r1
  2200. ;        move.b  #$80,r3         ; nur falls ohne Rand
  2201.         eor.w   r5,r5
  2202.         
  2203.         move.w  #47,r4          ; 48 falls ohne Rand
  2204. _u52:   move.w  #63,r2          ; 64 falls ohne Rand
  2205.         move.b  #$80,r3         ; nur falls mit Rand
  2206. _u51:   move.b  (r5.w){s3},m0
  2207.         inc.w   r5
  2208.         eor.b   #$0f,m0
  2209.         eor.b   r0,r0
  2210.         out.w   r0,r1
  2211.  
  2212.         move.b  (r6.w){s1},r0
  2213.         move.b  r3,(r6.w){s1}
  2214.         ror.b   #1,r3
  2215.         cmp.b   #$80,r3
  2216.         bne.b   _u53
  2217.         inc.w   r6
  2218. _u53:   dbf.w   r2,_u51
  2219.         inc.w   r5              ; nur falls mit Rand
  2220.         add.w   #80-7,r6        ; 80-8 falls ohne Rand
  2221.         dec.w   r4
  2222.         bne.b   _u52    
  2223.         br.w    _u60
  2224.  
  2225.  
  2226. bit_tab:dc.b    0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
  2227.         dc.b    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5
  2228.  
  2229.  
  2230.  
  2231. meld1:  dc.b    ' : Pruefsummenfehler',0
  2232. meld2:  dc.b    'Nicht genuegend Speicher',0
  2233. meld3:  dc.b    'bild??.dat nicht gefunden',0
  2234. meld4:  dc.b    'Maustreiber nicht installiert',0
  2235. meld5:  dc.b    13,10,'V 1.02: Please report any bug to',
  2236.         dc.b    ' klee@informatik.unibw-muenchen.de',0
  2237.  
  2238. main:
  2239.         move.w  #$100,r5
  2240.         move.w  #checksum,r6
  2241.         eor.l   r0,r0
  2242. _5:     add.l   (r5.w),r0
  2243.         addq.l  #4,r5
  2244.         cmp.w   r6,r5
  2245.         bls.b   _5
  2246.         or.l    r0,r0
  2247.         beq.b   _6
  2248.  
  2249. if check
  2250.         sub.l   checksum,r0
  2251.         neg.l   r0
  2252.         bsr.w   print_hex_l
  2253.         move.w  #meld1,r0
  2254.         bsr.w   print_string
  2255.         br.w    ende
  2256. endif
  2257.  
  2258. _6:     eor.w   r0,r0
  2259.         trap    #$33
  2260.         inc.w   r0
  2261.         beq.b   _4
  2262.         move.w  #meld4,r0
  2263.         bsr.w   print_string
  2264.         br.w    ende
  2265.         
  2266. _4:     move.w  #$40,r0
  2267.         move.w  r0,s1
  2268.         move.w  8{s1},r0        ; verwende LPT1:
  2269.         move.w  r0,LPT_DAT
  2270.         inc.w   r0
  2271.         move.w  r0,LPT_STAT
  2272.         inc.w   r0
  2273.         move.w  r0,LPT_COMM
  2274.         
  2275.         move.w  #$80,r5
  2276.         move.b  (r5.w),r0
  2277. _12:    cmp.w   #'m-',(r5.w)
  2278.         beq.b   _11
  2279.         cmp.w   #'c-',(r5.w)
  2280.         beq.b   _14        
  2281.         cmp.w   #'v-',(r5.w)
  2282.         beq.b   _17        
  2283.         cmp.w   #'2-',(r5.w)
  2284.         beq.b   _18        
  2285. _19:    inc.w   r5
  2286.         dec.b   r0
  2287.         bpl.b   _12
  2288.         br.b    _13
  2289. _18:    move.w  10{s1},r0        ; verwende LPT2:
  2290.         move.w  r0,LPT_DAT
  2291.         inc.w   r0
  2292.         move.w  r0,LPT_STAT
  2293.         inc.w   r0
  2294.         move.w  r0,LPT_COMM
  2295.         br.b    _19
  2296. _11:    move.b  #0,.no_change_color+2
  2297. _14:    move.b  #255,.no_mix_color+4
  2298.         br.b    _19
  2299. _17:    move.b  #1,.no_right_button+1
  2300.         br.b    _19
  2301. _13:    move.w  #$a000,r0
  2302.         move.w  r0,s1
  2303.         move.w  s0,r0
  2304.         add.w   #$1000,r0
  2305.         move.w  r0,s2
  2306.         add.w   #$1000,r0
  2307.         move.w  r0,s3           ; Daten hinter Codesegment
  2308.         add.w   #$1000,r0
  2309.         cmp.w   2.w,r0          ; Speicherende aus dem PSP
  2310.         blo.b   _7
  2311.         move.w  #meld2,r0
  2312.         bsr.w   print_string
  2313.         br.w    ende
  2314.                                 ; s1 Bildspeicher
  2315.                                 ; s2 Bild
  2316.                                 ; s3 Fill-Puffer
  2317. _7:     bsr.w   init_graph
  2318.         bsr.w   maus_init
  2319.  
  2320. _41:    bsr.w   get_bild
  2321.         bcc.b   _8
  2322.  
  2323.         inc.b   name1+1
  2324.         cmp.b   #'9',name1+1
  2325.         bls.b   _41
  2326.         move.b  #'0',name1+1
  2327.         inc.b   name1
  2328.         cmp.b   #'9',name1
  2329.         bls.b   _41
  2330.  
  2331.         move.w  #$03,r0
  2332.         trap    #$10
  2333.         move.w  #meld3,r0
  2334.         bsr.w   print_string
  2335.         br.w    ende
  2336.  
  2337. _8:     move.w  #1,color1
  2338.         move.w  #1,color2
  2339.         bsr.w   maus_on
  2340.  
  2341. _10:    bsr.w   maus_read
  2342.         tst.b   #$01,r0
  2343.         beq.b   _31
  2344.  
  2345.         bsr.w   maus_off
  2346.         bsr.w   fill
  2347.         move.b  #1,color_changed
  2348.         tst.b   #$ff,auto_color
  2349.         beq.b   _39
  2350.         move.w  color1,r0
  2351. _21:    add.b   #5,r0
  2352.         and.w    #$000f,r0
  2353.         beq.b   _21
  2354.         cmp.b   #15,r0
  2355.         beq.b   _21
  2356.         move.w  r0,color1
  2357.         move.w  r0,color2
  2358.         br.b    _39
  2359.  
  2360. .no_right_button:
  2361. _31:    tst.b   #$02,r0
  2362.         beq.b   _30
  2363.         bsr.w   maus_off
  2364.         bsr.w   new_color
  2365. _39:    bsr.w   maus_read
  2366.         or.b    r0,r0
  2367.         bne.b   _39
  2368.         bsr.w   maus_on
  2369.  
  2370. _30:    bsr.w   read_if_ch
  2371.         beq.w   _10
  2372.         cmp.b   #27,r0
  2373.         beq.w   _100
  2374.         bsr.w   maus_off
  2375.         bsr.w   eingabe
  2376.         bsr.w   maus_on
  2377.         br.w    _10
  2378.  
  2379. _99:    bsr.w   read_ch
  2380. _100:   bsr.w   write_bild
  2381.         ; Textmode
  2382.         move.w  #$03,r0
  2383.         trap    #$10
  2384.  
  2385.         br.w    ende
  2386.  
  2387. even4
  2388. xpos:   dc.l    0
  2389. ypos:   dc.l    0
  2390. xpos1:  dc.l    0
  2391. ypos1:  dc.l    0
  2392. color:  dc.w    0
  2393. color1: dc.w    0
  2394. color2: dc.w    0
  2395. auto_color:     dc.w    $00ff
  2396. color_changed:  dc.b    0
  2397. data_changed:   dc.b    0
  2398. name:   dc.b    'bild'
  2399. name1:  dc.b    '00'
  2400. name2:  dc.b    '.dat',0
  2401.  
  2402. palette_org:
  2403.         dc.b    00,00,00, 63,00,00, 63,21,00, 63,31,15
  2404.         dc.b    63,37,00, 63,42,00, 00,63,00, 00,63,31
  2405.         dc.b    42,63,00, 00,15,63, 00,38,63, 37,63,63
  2406.         dc.b    42,42,63, 63,63,00, 47,51,22, 63,63,63
  2407.  
  2408. palette_grau:
  2409.         dc.b    00,00,00, 04,04,04, 08,08,08, 12,12,12
  2410.         dc.b    16,16,16, 20,20,20, 24,24,24, 28,28,28
  2411.         dc.b    32,32,32, 36,36,36, 40,40,40, 44,44,44
  2412.         dc.b    48,48,48, 52,52,52, 56,56,56, 63,63,63
  2413.  
  2414.  
  2415.  
  2416. write_bild:
  2417.         tst.b   #$ff,color_changed
  2418.         beq.b   _10
  2419.         bsr.w   write_col
  2420. _10:    tst.b   #$ff,data_changed
  2421.         beq.b   _100
  2422.         bsr.w   write_dat
  2423. _100:   rts.w
  2424.  
  2425. write_col:
  2426.         movem.l r0-r7,-(sp)
  2427.  
  2428.         move.w  #fillbuff,r5
  2429.         move.w  fillcount,r2
  2430.         or.w    r2,r2
  2431.         beq.b   _20
  2432.         move.w  r5,r6
  2433.  
  2434. _30:    move.l  2.b(r5.w),r0
  2435.         rol.l   #12,r0
  2436.         lsr.b   #4,r0
  2437.         ror.l   #12,r0
  2438.         lsl.w   #4,r0
  2439.         lsl.l   #8,r0
  2440.         add.w   (r5.w),r0
  2441.         move.l  r0,(r6.w)
  2442.         addq.w  #6,r5
  2443.         addq.w  #4,r6
  2444.         dbf.w   r2,_30
  2445.  
  2446.  
  2447. _20:    move.l  #color_file,name2
  2448.         move.w  #$3c00,r0       ; Datei oeffnen
  2449.         move.w  #name,r1
  2450.         move.w  #0,r2
  2451.         trap    #$21
  2452.         bcs.w   _100            ; Fehler? dann aufhoeren
  2453.         move.w  r0,r3           ; handle nach r3
  2454.  
  2455.         move.w  #$4000,r0
  2456.         move.w  fillcount,r2
  2457.         lsl.w   #2,r2
  2458.         add.w   #2+16*3,r2
  2459.         move.w  #palette,r1
  2460.         trap    #$21
  2461.  
  2462.         move.w  #$3e00,r0       ; Datei schliessen
  2463.         trap    #$21
  2464.         move.b  #0,color_changed
  2465.  
  2466. _100:   movem.l (sp)+,r0-r7
  2467.         rts.w
  2468.  
  2469.  
  2470. write_dat:
  2471.         movem.l r0-r7,-(sp)
  2472.         move.w  s0,-(sp)
  2473.         
  2474.         move.w  s3,r0
  2475.         move.w  r0,s0
  2476.         
  2477.         eor.w   r6,r6
  2478.         eor.w   r5,r5
  2479.  
  2480.         move.w  #3,r3
  2481.         move.w  #480/ycount,r1          ; ycount Byte untereinander dann die
  2482. _72:    move.b  #80/4,m0                  ; naechsten ycount Byte daneben usw.
  2483. _71:    move.w  #ycount,r2
  2484. _70:    move.b  (r3.w,r5.w){s2},r0
  2485.         add.w   #80,r5
  2486.         not.b   r0
  2487.         move.b  r0,(r6.w)
  2488.         inc.w   r6
  2489.         dbf.w   r2,_70
  2490.         sub.w   #ycount*80,r5
  2491.         dec.b   r3
  2492.         bpl.b   _71
  2493.         and.b   #3,r3
  2494.         addq.w  #4,r5
  2495.         dec.b   m0
  2496.         bne.b   _71
  2497.         add.w   #(ycount-1)*80,r5
  2498.         dec.w   r1
  2499.         bne.b   _72
  2500.  
  2501.         move.w  s2,r0
  2502.         move.w  r0,s0
  2503.  
  2504.         move.w  #640*480/8,r2
  2505.         eor.w   r5,r5
  2506.         eor.w   r6,r6
  2507.  
  2508.         eor.b   r1,r1
  2509.         move.l  r5,r4
  2510.  
  2511. _80:    bsr.w   _out_null       ;comprimieren
  2512. _81:    cmp.w   #0,(r5.w){s3}
  2513.         beq.b   _90
  2514.         inc.w   r5
  2515.         inc.b   r1
  2516.         cmp.b   #128,r1
  2517.         blo.b   _82
  2518.         bsr.w   _out_muster
  2519. _82:    dbf.w   r2,_81
  2520.         bsr.w   _out_muster
  2521.         br.b    _59
  2522.  
  2523. _90:    bsr.w   _out_muster
  2524. _91:    cmp.b   #0,(r5.w){s3}
  2525.         bne.b   _80
  2526.         inc.w   r5
  2527.         inc.b   r1
  2528.         cmp.b   #128,r1
  2529.         blo.b   _92
  2530.         bsr.w   _out_null
  2531. _92:    dbf.w   r2,_91
  2532.         bsr.w   _out_null
  2533.         br.b    _59
  2534.  
  2535. _59:    move.w  s6,r0
  2536.         move.w  r0,s0
  2537.         move.l  #'tad.',name2
  2538.         move.w  #$3c00,r0       ; Datei oeffnen
  2539.         move.w  #name,r1
  2540.         move.w  #0,r2
  2541.         trap    #$21
  2542.         bcs.w   _100            ; Fehler? dann eben nicht schreiben
  2543.         move.w  r0,r3           ; handle nach r3
  2544.  
  2545.         move.w  s2,r0
  2546.         move.w  r0,s0
  2547.         move.w  #$4000,r0
  2548.         eor.w   r1,r1
  2549.         move.w  r6,r2
  2550.         trap    #$21
  2551.  
  2552.         move.w  #$3e00,r0       ; Datei schliessen
  2553.         trap    #$21
  2554.         move.b  #0,data_changed
  2555.  
  2556. _100:   move.w  (sp)+,s0
  2557.         movem.l (sp)+,r0-r7
  2558.         rts.w
  2559.  
  2560. _out_null:
  2561.         dec.b   r1
  2562.         bmi.b   _on2
  2563.         or.b    #$80,r1
  2564.         move.b  r1,(r6.w)
  2565.         inc.w   r6
  2566.         move.l  r5,r4
  2567. _on2:   eor.b   r1,r1
  2568.         rts.w
  2569.  
  2570. _out_muster:
  2571.         exg.l   r4,r5
  2572.         dec.b   r1
  2573.         bmi.b   _om2
  2574.         move.b  r1,(r6.w)
  2575.         inc.w   r6
  2576. _om1:   move.b  (r5.w){s3},r0
  2577.         inc.w   r5
  2578.         move.b  r0,(r6.w)
  2579.         inc.w   r6
  2580.         dec.b   r1
  2581.         bpl.b  _om1
  2582. _om2:   eor.b   r1,r1
  2583.         rts.w
  2584.  
  2585.  
  2586. write_bmp:
  2587.         movem.l r0-r7,-(sp)
  2588.         move.l  #'pmb.',name2
  2589.         move.w  #$3c00,r0
  2590.         eor.w   r2,r2
  2591.         move.w  #name,r1
  2592.         trap    #$21
  2593.         bcs.w   _100
  2594.         move.w  r0,r3
  2595.         
  2596.         move.w  #$4000,r0
  2597.         move.w  #_head_lang,r2
  2598.         move.w  #_head,r1
  2599.         trap    #$21
  2600.         bcs.w   _110
  2601.         cmp.w   #_head_lang,r0
  2602.         bne.w   _110
  2603.         
  2604.         move.w  #1023,r6
  2605.         
  2606.         move.w  #$3c6,r1        ; Video DAC Pixel Mask Register
  2607.         in.b    r1,r0
  2608.         move.b  r0,r2
  2609.         move.w  #$00ff,r4
  2610.  
  2611. _20:    move.w  r4,r0
  2612.         and.b   r2,r0
  2613.         move.w  #$3c7,r1        ; Video DAC Pixel Address (Read Mode)
  2614.         out.b   r0,r1
  2615.         move.w  #$3c9,r1        ; Video DAC Pixel Data Register
  2616.  
  2617.         move.b  #255,(r6.w){s3}   ; not used
  2618.         dec.w   r6
  2619.         bsr.w   wait
  2620.         in.b    r1,r0           ; rot
  2621.         lsl.b   #2,r0
  2622.         beq.b   _21
  2623.         or.b    #3,r0
  2624. _21:    move.b  r0,(r6.w){s3}
  2625.         dec.w   r6
  2626.         bsr.w   wait
  2627.         in.b    r1,r0           ; gruen
  2628.         lsl.b   #2,r0
  2629.         beq.b   _22
  2630.         or.b    #3,r0
  2631. _22:    move.b  r0,(r6.w){s3}
  2632.         dec.w   r6
  2633.         bsr.w   wait
  2634.         in.b    r1,r0           ; blau
  2635.         lsl.b   #2,r0
  2636.         beq.b   _23
  2637.         or.b    #3,r0
  2638. _23:    move.b  r0,(r6.w){s3}
  2639.         dec.w   r6
  2640.         
  2641.         dec.w   r4
  2642.         bpl.b   _20
  2643.  
  2644.         move.w  s0,-(sp)
  2645.         move.w  s3,r0
  2646.         move.w  r0,s0
  2647.         move.w  #$4000,r0
  2648.         move.w  #1024,r2
  2649.         move.w  #0,r1
  2650.         trap    #$21
  2651.         move.w  (sp)+,s0
  2652.         bcs.b   _110
  2653.         cmp.w   #1024,r0
  2654.         bne.b   _110
  2655.         move.w  r3,_handle
  2656.         
  2657.         move.w  #5,_count
  2658.         move.l  #479*640,r5
  2659.         move.w  #640,r4
  2660. _60:    move.w  #61440,r2
  2661.         move.w  #_trans,r3
  2662.         eor.w   r6,r6
  2663. _50:    
  2664.         bsr.w   get_color
  2665.         inc.l   r5
  2666.         dec.w   r4
  2667.         bne.b   _51
  2668.         sub.l   #2*640,r5
  2669.         move.w  #640,r4
  2670. _51:    move.b  (r3.w,r0.b),r0
  2671.         move.b  r0,(r6.w){s3}
  2672.         inc.w   r6
  2673.         dbf.w   r2,_50
  2674.  
  2675.         move.w  _handle,r3
  2676.         move.w  s0,-(sp)
  2677.         move.w  s3,r0
  2678.         move.w  r0,s0
  2679.         move.w  #$4000,r0
  2680.         move.w  #61440,r2
  2681.         move.w  #0,r1
  2682.         trap    #$21
  2683.         move.w  (sp)+,s0
  2684.         bcs.b   _110
  2685.         cmp.w   #61440,r0
  2686.         bne.b   _110
  2687.         dec.w   _count
  2688.         bne.b   _60
  2689.         
  2690. _110:   move.w  #$3e00,r0
  2691.         trap    #$21
  2692. _100:   movem.l (sp)+,r0-r7
  2693.         rts.w
  2694.         
  2695. _handle:dc.w    0
  2696. _count: dc.w    0
  2697. _trans: dc.b  0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63
  2698.  
  2699. _head:  dc.b  $42,$4d,$36,$b4,$04,$00,$00,$00,$00,$00,$36,$04,$00,$00,$28,$00
  2700.         dc.b  $00,$00,$80,$02,$00,$00,$e0,$01,$00,$00,$01,$00,$08,$00,$00,$00
  2701.         dc.b  $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  2702.         dc.b  $00,$00,$00,$00,$00,$00
  2703.         _head_lang=@-_head
  2704.         
  2705.  
  2706. ;**************************************************************************
  2707. ;*                                                                        *
  2708. ;*          Hardcopy VGA 640x480  16 Farben                               *
  2709. ;*                                                                        *
  2710. ;**************************************************************************
  2711.  
  2712.  
  2713.         LPT=0       ; 0 fuer Adresse $3bc  (falls vorhanden LPT1:)  
  2714.                     ; 1 fuer Adresse $378  (meist LPT1:) 
  2715.                     ; 2 fuer Adresse $278  (meist LPT2:) 
  2716.  
  2717.         CONTRAST=1  ; 0 fuer Orginalhelligkeit
  2718.                     ; 1 fuer Kontrastverstaerkung und Aufhellung
  2719.  
  2720.  
  2721. hardcopy:   
  2722.         movem.l r0-r7,-(sp)
  2723.         move.w  s0,-(sp)
  2724.         move.w  s1,-(sp)
  2725.         move.w  s6,r0
  2726.         move.w  r0,s0
  2727.         move.w  #$a000,r0
  2728.         move.w  r0,s1
  2729.  
  2730.         move.w  #$3c6,r1        ; Video DAC Pixel Mask Register
  2731.         in.b    r1,r0
  2732.         move.b  r0,r2
  2733.         move.w  #$00ff,r3
  2734.  
  2735. _20:    move.b  r3,r0
  2736.         and.b   r2,r0
  2737.         move.w  #$3c7,r1        ; Video DAC Pixel Address (Read Mode)
  2738.         out.b   r0,r1
  2739.         move.w  #$3c9,r1        ; Video DAC Pixel Data Register
  2740.         bsr.w   wait
  2741.         in.b    r1,r0           ; rot
  2742.         and.w   #$3f,r0
  2743.         mulsq.w #39,r0,r4       ; 39/130 (0.30)
  2744.         bsr.w   wait
  2745.         in.b    r1,r0           ; gruen
  2746.         and.w   #$3f,r0
  2747.         mulsq.w #77,r0,r0       ; 77/130 (0.59)
  2748.         add.w   r0,r4
  2749.         bsr.w   wait
  2750.         in.b    r1,r0           ; blau
  2751.         and.w   #$3f,r0
  2752.         mulsq.w #14,r0,r0       ; 14/130 (0.11)
  2753.         add.w   r4,r0
  2754.         lsr.w   #5,r0
  2755.         move.b  r0,tab(r3.w)
  2756.         dec.w   r3
  2757.         bpl.b   _20
  2758.  
  2759.         move.b  tab+20,r0
  2760.         move.b  r0,tab+6
  2761.         move.b  tab+56,r0
  2762.         move.b  r0,tab+8
  2763.         move.b  tab+57,r0
  2764.         move.b  r0,tab+9
  2765.         move.b  tab+58,r0
  2766.         move.b  r0,tab+10
  2767.         move.b  tab+59,r0
  2768.         move.b  r0,tab+11
  2769.         move.b  tab+60,r0
  2770.         move.b  r0,tab+12
  2771.         move.b  tab+61,r0
  2772.         move.b  r0,tab+13
  2773.         move.b  tab+62,r0
  2774.         move.b  r0,tab+14
  2775.         move.b  tab+63,r0
  2776.         move.b  r0,tab+15
  2777.         
  2778.  
  2779.         IF CONTRAST
  2780.         ; hoechste und niedrigste Helligkeit berechnen
  2781.         move.w  #$00ff,r3
  2782.         move.w  r3,r1           ; min
  2783.         eor.w   r2,r2           ; max
  2784. _50:    move.b  tab(r3.w),r0
  2785.         cmp.b   r1,r0
  2786.         bhs.b   _51
  2787.         move.b  r0,r1           ; min
  2788. _51:    cmp.b   r2,r0
  2789.         bls.b   _52
  2790.         move.b  r0,r2           ; max
  2791. _52:    dec.w   r3
  2792.         bpl.b   _50
  2793.         move.w  r1,r5           ; xmin
  2794.         sub.b   r1,r2           ; max-min
  2795.         beq.b   _70
  2796.  
  2797.         ; Kontrast erhoehen
  2798.         move.w  #$00ff,r3
  2799.         move.w  r3,r4
  2800. _53:    movu.bw tab(r3.w),r0
  2801.         sub.w   r5,r0
  2802.         muls.w  r4,r0,r1|r0
  2803.         divs.w  r2,r1|r0
  2804.         move.b  r0,tab(r3.w)    ; 255*(x-xmin) / (xmax-xmin)
  2805.         dec.w   r3
  2806.         bpl.b   _53
  2807.  
  2808.         ; mittlere Helligkeit des Bildes berechnen
  2809.         move.w  #tab,r3
  2810.         move.w  #320*200,r2
  2811.         eor.l   r0,r0
  2812.         eor.l   r4,r4
  2813.         eor.w   r5,r5
  2814. _54:    move.b  (r5.w){s1},r0
  2815.         inc.w   r5
  2816.         move.b  (r3.w,r0.b),r0
  2817.         add.l   r0,r4
  2818.         dbf.w   r2,_54
  2819.         cmp.l   #320*200*128,r4 ; Bild hell genug?
  2820.         bhi.b   _70
  2821.  
  2822.         ; Helligkeit erhoehen
  2823.         move.w  #$00ff,r3
  2824.         move.w  r3,r2
  2825. _55:    movu.bw tab(r3.w),r0
  2826.         move.w  #510,r1
  2827.         sub.w   r0,r1
  2828.         muls.w  r1,r0,r1|r0
  2829.         divs.w  r2,r1|r0
  2830.         move.b  r0,tab(r3.w)    ; x*(510-x)/255
  2831.         dec.w   r3
  2832.         bpl.b   _55
  2833. _70:
  2834.         ENDIF
  2835.         
  2836.         move.b  #1,plot_ok
  2837.         move.l  #ps_ini,r1
  2838.         bsr.w   plot_string
  2839.  
  2840.         move.w  #tab,r3
  2841.         move.l  #640*480,r2
  2842.         eor.l   r5,r5
  2843. _30:    bsr.w   get_color
  2844.         inc.l   r5
  2845.         move.b  (r3.w,r0.b),r0
  2846.         bsr.w   plot_hex_byte
  2847.         tst.b   #$ff,plot_ok
  2848.         beq.b   _40             ; Timeout
  2849.         dbf.l   r2,_30
  2850.  
  2851.         move.l  #ps_end,r1
  2852.         bsr.w   plot_string
  2853.  
  2854. _40:    move.w  (sp)+,s1
  2855.         move.w  (sp)+,s0
  2856.         movem.l (sp)+,r0-r7
  2857.         rts.w
  2858.  
  2859. get_color:
  2860.         move.w  r2,-(sp)
  2861.         move.w  r3,-(sp)
  2862.         move.w  r4,-(sp)
  2863.         move.l  r5,-(sp)
  2864.         move.l  r6,-(sp)
  2865.  
  2866.         move.l  r5,r6
  2867.         lsr.l   #3,r6
  2868.         and.w   #7,r5
  2869.         eor.w   #7,r5
  2870.         eor.w   r4,r4
  2871.         move.w  #$3ce,r1        ; Graphics Controller Index Register
  2872.  
  2873.         move.w  #$0304,r0       ; Register 4 (Read Plane Select) = 3
  2874.         move.w  #4,r2
  2875. _20:    out.w   r0,r1
  2876.         move.b  (r6.w){s1},r3
  2877.         add.w   r4,r4
  2878.         btst.w  r5,r3
  2879.         bcc.b   _10
  2880.         inc.w   r4
  2881. _10:    sub.w   #$0100,r0
  2882.         dbf.w   r2,_20
  2883.         move.w  r4,r0
  2884.  
  2885.         move.l  (sp)+,r6
  2886.         move.l  (sp)+,r5
  2887.         move.w  (sp)+,r4
  2888.         move.w  (sp)+,r3
  2889.         move.w  (sp)+,r2
  2890.         rts.w
  2891.  
  2892.  
  2893. wait:   move.w  r2,-(sp)
  2894.         move.w  #100,r2
  2895. _10:    dbf.w   r2,_10
  2896.         move.w  (sp)+,r2
  2897.         rts.w
  2898.         
  2899. ps_ini:
  2900. dc.b    04
  2901. dc.b    ' /zeile 640 string def'
  2902. dc.b    ' 585 30 translate'; x-Richtung: 1 Bildpunkt = 5 Laserpunkte
  2903. dc.b    ' 90 rotate'       ; y-Richtung: 1 Bildpunkt = 5 Laserpunkte
  2904. dc.b    ' 768 576 scale'   ; (640*72/300)*5 , (480*72/300)*5
  2905. dc.b    ' 640 480 8 [640 0 0 -480 0 480]'
  2906. dc.b    ' {currentfile zeile readhexstring pop }'
  2907. dc.b    ' image '
  2908. dc.b    0
  2909.  
  2910. ps_end:
  2911. dc.b    ' showpage ',04,0
  2912.  
  2913. LPT_DAT: dc.w   $3bc
  2914. LPT_STAT:dc.w   $3bd
  2915. LPT_COMM:dc.w   $3be
  2916.  
  2917. plot_ok: dc.b  0
  2918.  
  2919. plot_ch:
  2920.  
  2921.         ; gibt Zeichen in r0.b an Drucker aus
  2922.         ; Eingabe:  r0.b  : auszugebendes Zeichen
  2923.         ; Ausgabe:  keine
  2924.         ; veraenderte Register: keine
  2925.  
  2926.         tst.b   #$ff,plot_ok
  2927.         beq.b   _102
  2928.  
  2929.         move.w  r0,-(sp)
  2930.         move.w  r1,-(sp)
  2931.         move.l  r2,-(sp)
  2932.         move.b  r0,m0
  2933.  
  2934.         move.l  #$10000000,r2
  2935.         move.w  LPT_STAT,r1
  2936. _10:    in.b    r1,r0
  2937.         tst.b   #$80,r0         ; BUSY
  2938.         dbne.l  r2,_10
  2939.         beq.b   _100            ; timeout
  2940.  
  2941.         move.b  m0,r0
  2942.         move.w  LPT_DAT,r1
  2943.         out.b   r0,r1           ; Datenbyte
  2944.  
  2945.         move.w  LPT_COMM,r1
  2946.         in.b    r1,r0
  2947.         move.b  r0,m0
  2948.         move.b  #$0f,r0
  2949.         out.b   r0,r1           ; STROBE aktiv
  2950.         move.w  #10,r2
  2951. _11:    dbf.w   r2,_11
  2952.         move.b  #$0e,r0
  2953.         out.b   r0,r1           ; STROBE inaktiv
  2954.  
  2955.         move.l  #$10000000,r2
  2956.         move.w  LPT_STAT,r1
  2957. _20:    in.b    r1,r0
  2958.         tst.b   #$80,r0         ; BUSY
  2959.         dbne.l  r2,_20
  2960.         bne.b   _30
  2961.         move.b  #0,plot_ok     ; timeout
  2962.  
  2963. _30:    move.b  #$ff,r0
  2964.         move.w  LPT_DAT,r1
  2965.         out.b   r0,r1           ; Datenleitungen high
  2966.  
  2967.         move.b  m0,r0
  2968.         move.w  LPT_COMM,r1
  2969.         out.b   r0,r1
  2970.         br.b    _101
  2971.  
  2972. _100:   move.b  #0,plot_ok
  2973. _101:   move.l  (sp)+,r2
  2974.         move.w  (sp)+,r1
  2975.         move.w  (sp)+,r0
  2976. _102:   rts.w
  2977.  
  2978.  
  2979. plot_string:
  2980.         ; gibt String (mit 0 abgeschlossen) an Drucker aus
  2981.         ; Eingabe:  r1.l{s0}  : Zeiger auf String
  2982.         ; Ausgabe:  keine
  2983.         ; veraenderte Register: keine
  2984.  
  2985.         move.w  r0,-(sp)
  2986.         move.l  r1,-(sp)
  2987.  
  2988. _20:    move.b  (r1),r0
  2989.         inc.w   r1
  2990.         tst.b   r0,r0
  2991.         beq.b   _10
  2992.         bsr.w   plot_ch
  2993.         br.b    _20
  2994. _10:    move.l  (sp)+,r1
  2995.         move.w  (sp)+,r0
  2996.         rts.w
  2997.  
  2998.  
  2999. plot_hex_byte: 
  3000.         ; gibt Byte in Hexform an Drucker aus
  3001.         ; Eingabe:  r0.b  : auszugebendes Byte
  3002.         ; Ausgabe:  keine
  3003.         ; veraenderte Register: keine
  3004.  
  3005.         move.w  r0,-(sp)
  3006.         move.b  r0,m0
  3007.  
  3008.         lsr.b   #4,r0
  3009.         add.b   #'0',r0
  3010.         cmp.b   #'9',r0
  3011.         bls.b   _10
  3012.         add.b   #'a'-'0'-10,r0
  3013. _10:    bsr.w   plot_ch
  3014.  
  3015.         move.b  m0,r0
  3016.         and.b   #$0f,r0
  3017.         add.b   #'0',r0
  3018.         cmp.b   #'9',r0
  3019.         bls.b   _20
  3020.         add.b   #'a'-'0'-10,r0
  3021. _20:    bsr.w   plot_ch
  3022.  
  3023.         move.b  #13,r0
  3024.         bsr.w   plot_ch
  3025.         move.b  #10,r0
  3026.         bsr.w   plot_ch
  3027.  
  3028.         move.w  (sp)+,r0
  3029.         rts.w
  3030.  
  3031.  
  3032.  
  3033. ;**************************************************************************
  3034. ;*                                                                        *
  3035. ;*     Ende      Hardcopy VGA 640x480  16 Farben                          *
  3036. ;*                                                                        *
  3037. ;**************************************************************************
  3038.  
  3039.  
  3040.  
  3041. even4
  3042. checksum:       dc.l    check       ; muss am Ende des Codes stehen
  3043.  
  3044. palette:        blk.b   3*16
  3045. fillcount:      blk.w   1
  3046. maxfill=1024
  3047. fillbuff:       blk.w   maxfill*6
  3048. fillbuff_end:
  3049. bild_save:      blk.b   4*4*32*4*4
  3050. tab:            blk.b   256     ; hier 256 Byte fuer Helligkeitstabelle
  3051.  
  3052.